开发者

MySQL database design problem

I have design problem, which I would love to get a hand with. I normally don't have problems with designing databases, but this one gives me some trouble. :) I'm making a program which is basically a task-manager, where you can create Activities and Events. An Activity may or may not have an Event associated with it, and an Event will have one to many associations. How do I design the Event database? Since every Event can have mo开发者_运维百科re than one association, will I need to make a table for each Event? Where the tablename is it's unique name? I'm completely blank. Thanks


Since every Event can have more than one association, will I need to make a table for each Event?

No. You need some version of:

Activity
--------
ActivityID
ActivityDescription

Event
-----
EventID
EventDescription

EventActivity
-------------
EventID
ActivityID

Then, to list an Event with all its Activities:

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

You need the LEFT OUTER JOIN instead of the usual INNER JOIN in case there are no Activities for the event.


Well starting with the obvious:

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

Then to make a link between an event and an activity, all you need to do is to add the two ID's together to the relationship table.

And keep in mind, relational databases (basically anything that's not NoSQL) grow downward (they gain rows), never horizontally (never in columns or tables) as you add more data. That will help you make intuitive database designs.


Using @egrunin answer, if you need to get all activities and events you can use:

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
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜