SQL 自动创建 Table
Having SQL Automatically Create a Table
我是数据库新手,需要一些帮助。我的数据库中有一个 table,其中包含有关所有事件的信息。因此,例如,有几行,每一行描述一个不同的事件。
现在,我还需要跟踪参加活动的用户。那么我将如何设计呢?我在想,如果有什么办法,可以在每次向事件 table 添加新行时专门为那个事件创建一个新的 table。那可能吗?或者只在主要事件 table 中添加一个列,用逗号或分号或其他东西分隔参加者的姓名是否是个好主意?还是为每个用户创建一个 table 更好,每一行都是一个正在参加的事件?
提前致谢。
... would it be a good idea to just add a column in the main events table, with names of people attending delimited by a comma or a semicolon or something?
嗯,您可能需要阅读 joins first this will help with relations between tables. You would create an events table and and a users table with a relational table 以了解哪些用户参与了哪些活动。这样你就不必有用户的逗号列表(这根本没有表现好)。
我建议您有一个事件 table 具有不同 table 的类型,我打赌每个事件都将包含相同的信息,所以它才有意义。
即时创建 table 只会导致混乱和复杂,我认为您无法在这里真正证明这一点。
更好的方法是使用如下内容:
Create table events(
id integer,
<OTHER EVENT DETAILS HERE (i.e. start time, location, duration etc>
primary key (event_id)
);
Create table users(
id integer,
<OTHER USER DETAILS HERE (i.e. name, email, phone etc)>
primary key (user_id)
);
CREATE TABLE event_users(
event_id integer,
user_id integer,
<OTHER USER/EVENT DETAILS HERE (i.e. ticket price paid etc)>
Primary Key (event_id,user_id),
Foreign Key (event_id) REFERENCES events(id),
Foreign Key (user_id) REFERENCES users(id)
);
这样活动可以有 0 个或多个用户参加,用户可以参加 0 个或多个活动,您不需要创建更多表。
您获取数据的方式类似于:
SELECT U.id
FROM User U, UserEvent UE
WHERE U.id = UE.user_id
AND UE.event_id = <event id you want to search for>;
听起来您正在映射多对多关系。每个用户可以参加一个或多个活动,每个活动可以有 1 个或多个用户。
一种选择是设置三个 table。
Table 1:Events,描述了每一个事件。
Table2:Users,描述了每个用户
Table 3:EventUsers,这将是一个中介 table。 table 至少有两列:来自事件的主键和来自用户的主键。
我是数据库新手,需要一些帮助。我的数据库中有一个 table,其中包含有关所有事件的信息。因此,例如,有几行,每一行描述一个不同的事件。
现在,我还需要跟踪参加活动的用户。那么我将如何设计呢?我在想,如果有什么办法,可以在每次向事件 table 添加新行时专门为那个事件创建一个新的 table。那可能吗?或者只在主要事件 table 中添加一个列,用逗号或分号或其他东西分隔参加者的姓名是否是个好主意?还是为每个用户创建一个 table 更好,每一行都是一个正在参加的事件?
提前致谢。
... would it be a good idea to just add a column in the main events table, with names of people attending delimited by a comma or a semicolon or something?
嗯,您可能需要阅读 joins first this will help with relations between tables. You would create an events table and and a users table with a relational table 以了解哪些用户参与了哪些活动。这样你就不必有用户的逗号列表(这根本没有表现好)。
我建议您有一个事件 table 具有不同 table 的类型,我打赌每个事件都将包含相同的信息,所以它才有意义。
即时创建 table 只会导致混乱和复杂,我认为您无法在这里真正证明这一点。
更好的方法是使用如下内容:
Create table events(
id integer,
<OTHER EVENT DETAILS HERE (i.e. start time, location, duration etc>
primary key (event_id)
);
Create table users(
id integer,
<OTHER USER DETAILS HERE (i.e. name, email, phone etc)>
primary key (user_id)
);
CREATE TABLE event_users(
event_id integer,
user_id integer,
<OTHER USER/EVENT DETAILS HERE (i.e. ticket price paid etc)>
Primary Key (event_id,user_id),
Foreign Key (event_id) REFERENCES events(id),
Foreign Key (user_id) REFERENCES users(id)
);
这样活动可以有 0 个或多个用户参加,用户可以参加 0 个或多个活动,您不需要创建更多表。
您获取数据的方式类似于:
SELECT U.id
FROM User U, UserEvent UE
WHERE U.id = UE.user_id
AND UE.event_id = <event id you want to search for>;
听起来您正在映射多对多关系。每个用户可以参加一个或多个活动,每个活动可以有 1 个或多个用户。 一种选择是设置三个 table。 Table 1:Events,描述了每一个事件。 Table2:Users,描述了每个用户 Table 3:EventUsers,这将是一个中介 table。 table 至少有两列:来自事件的主键和来自用户的主键。