让SQL自动创建表

时间:2015-01-19 02:39:44

标签: mysql sql database database-design

我是数据库新手,我需要帮助。我的数据库中有一个表,其中包含有关所有事件的信息。例如,有行,每行都描述不同的事件。

现在,我还需要跟踪参加活动的用户。那么我该如何设计呢?我想如果有某种方法,每次在事件表中添加新行时,专门为每个事件创建一个新表。这可能吗?或者在主事件表中添加一个列是一个好主意,其中包含以逗号或分号或其他东西分隔的人员名称?或者为每个用户创建一个表更好,每一行都是一个正在参加的事件?

提前致谢。

3 个答案:

答案 0 :(得分:2)

更好的方法是使用以下内容:

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 :(得分:1)

  

...在主要事件表中添加一个列是不是一个好主意,其中包含以逗号或分号或其他东西分隔的人名?

嗯,你可能想先阅读joins,这将有助于表之间的关系。您将创建一个事件表和一个带有relational table的用户表,以跟踪哪个用户在哪个事件上。这样您就不必拥有用户的逗号列表(根本不能很好地运行)。

我建议你有一个在不同的表中有一个类型的事件表,我打赌每个事件都包含相同的信息,所以它才有意义。

动态创建表格只会导致混乱和复杂性,我认为你不能在这里证明这一点。

答案 2 :(得分:1)

听起来你正在映射多对多的关系。每个用户可以参加一个或多个活动,每个活动可以有一个或多个用户。 一种选择是拥有三张桌子。 表1:描述每个事件的事件。 表2:描述每个用户的用户 表3:EventUsers,它将是一个中间表。此表至少有两列:来自Events的主键和来自Users的主键。