MySQL数据库设计问题

MySQL数据库设计问题,mysql,database,Mysql,Database,我有设计上的问题,我很想帮忙。我通常在设计数据库方面没有问题,但这一次给我带来了一些麻烦。:) 我正在制作一个程序,它基本上是一个任务管理器,您可以在其中创建活动和事件。一个活动可能有也可能没有关联的事件,一个事件将有一对多关联。 如何设计事件数据库?既然每个事件都可以有多个关联,我是否需要为每个事件创建一个表?表名在哪里?它的唯一名称是什么?我一片空白。 谢谢 既然每个事件都可以有多个关联,我是否需要为每个事件创建一个表 不需要。您需要以下版本: Activity -------- Activ

我有设计上的问题,我很想帮忙。我通常在设计数据库方面没有问题,但这一次给我带来了一些麻烦。:) 我正在制作一个程序,它基本上是一个任务管理器,您可以在其中创建活动和事件。一个活动可能有也可能没有关联的事件,一个事件将有一对多关联。 如何设计事件数据库?既然每个事件都可以有多个关联,我是否需要为每个事件创建一个表?表名在哪里?它的唯一名称是什么?我一片空白。 谢谢

既然每个事件都可以有多个关联,我是否需要为每个事件创建一个表

不需要。您需要以下版本:

Activity
--------
ActivityID
ActivityDescription

Event
-----
EventID
EventDescription

EventActivity
-------------
EventID
ActivityID
然后,列出一个事件及其所有活动:

SELECT * from Event
LEFT OUTER JOIN EventActivity ON Event.EventID = EventActivity.EventID
LEFT OUTER JOIN JOIN Activity ON Activity.ActivityID = EventActivity.ActivityID
如果事件没有活动,则需要使用
左外部联接
而不是通常的
内部联接

既然每个事件都可以有多个关联,我是否需要为每个事件创建一个表

不需要。您需要以下版本:

Activity
--------
ActivityID
ActivityDescription

Event
-----
EventID
EventDescription

EventActivity
-------------
EventID
ActivityID
然后,列出一个事件及其所有活动:

SELECT * from Event
LEFT OUTER JOIN EventActivity ON Event.EventID = EventActivity.EventID
LEFT OUTER JOIN JOIN Activity ON Activity.ActivityID = EventActivity.ActivityID

如果事件没有活动,则需要使用
左外部联接
而不是通常的
内部联接

使用@egrunin answer,如果需要获取所有活动和事件,则可以使用:

SELECT a.ActivityID, e.EventID
FROM Activity a
LEFT JOIN EventActivity ea
ON a.ActivityID = ea.ActivityID
LEFT JOIN Event e
ON ea.EventID = e.EventID

如果您需要获取所有可以使用的活动和事件,请使用@egrunin answer:

SELECT a.ActivityID, e.EventID
FROM Activity a
LEFT JOIN EventActivity ea
ON a.ActivityID = ea.ActivityID
LEFT JOIN Event e
ON ea.EventID = e.EventID

从显而易见的事情开始:

Event(evid PK, event details)
Activity(actid PK, activity details)
EventActivityRelationship(evid FK, actid FK)  -- both make the primary key together

-- where PK is primary key and FK is foreign key
然后,要在事件和活动之间建立链接,只需将这两个ID一起添加到关系表中


请记住,当您添加更多数据时,关系数据库(基本上是非NoSQL的任何数据库)向下增长(它们获得行),而不是水平增长(从不在列或表中)。这将有助于您进行直观的数据库设计。

我们从显而易见的以下几点开始:

Event(evid PK, event details)
Activity(actid PK, activity details)
EventActivityRelationship(evid FK, actid FK)  -- both make the primary key together

-- where PK is primary key and FK is foreign key
然后,要在事件和活动之间建立链接,只需将这两个ID一起添加到关系表中


请记住,当您添加更多数据时,关系数据库(基本上是非NoSQL的任何数据库)向下增长(它们获得行),而不是水平增长(从不在列或表中)。这将帮助您进行直观的数据库设计。

更好地解释:您的活动对象可以包含零个、一个或多个事件对象。事件只与活动或其他事物相关?请更好地解释:您的活动对象可以有零个、一个或多个事件对象。事件只与活动或其他事物相关?@egrunin:使用您的答案(+1)我给OP一个查询,以捕获所有项目。。。我希望你同意:)看起来像是我需要的。:)澄清一下:我需要在EventActivity中为其中的每个活动输入一个信息?因此,如果我有一个ID为1的事件,以及两个与该事件相关的活动,ID为1和2,那么数据库中会有两行代码:“1,1”和“1,2”?:)是的,当您要将活动与事件连接时,您可以向EventActivity添加一行。@egrunin:使用您的答案(+1),我向OP提供一个查询以捕获所有项目。。。我希望你同意:)看起来像是我需要的。:)澄清一下:我需要在EventActivity中为其中的每个活动输入一个信息?因此,如果我有一个ID为1的事件,以及两个与该事件相关的活动,ID为1和2,那么数据库中会有两行代码:“1,1”和“1,2”?:)是的,当您要将活动与事件连接时,您可以向EventActivity添加一行。非常感谢您提供的易于理解的答案。:)由于我远非这方面的专家,因此它确实很有帮助。非常感谢您提供了易于理解的答案。:)由于我远非这方面的专家,它变得非常有用。