1

我有2个表 - 一个存储用户信息(id,用户名,密码),第二个存储关于事件(id,名称,描述,日期,用户名(代表创建事件的用户)的信息)。我想实现'最喜欢的事件'功能。这将允许用户存储他最喜欢的事件,并稍后将其显示在列表中。我不确定如何在设计方面实现这一点。我需要一个简单的解决方案就像在用户表中的字段中存储最喜欢事件的ID一样。我正在使用mysql和PHP。任何人都可以指向正确的方向吗?如何设计这个简单的数据库?

+0

创建第三个表来存储用户的每个喜爱事件的用户ID /偶数组合。 – Veger 2010-04-21 12:40:23

回答

4

您希望有一个链接来自用户和事件表的外键的表。

用户表:

id, username, password 

事件表:

id, name, description, date, username 

收藏表:

id, user_id, event_id 

这样,您就可以轻松地访问喜爱的事件列表。

SELECT events.name, events.description, events.date 
FROM events, users, favorites 
WHERE favorites.user_id = users.id 
AND favorites.event_id = events.id 
+0

为什么在'收藏夹'表中添加'id'列?没用的。 – Crozin 2010-04-21 12:45:22

+0

你能告诉我外键关系应该是什么样子吗? – Vonder 2010-04-21 13:13:31

+0

在这个例子中,user_id和event_id是外键。正如你在SQL提供的信息中看到的,它们与users.id和events.id(主键)相关。 – chills42 2010-04-21 13:31:15

0

你需要的是最经典和最基本的many-to-many关系。

您需要额外的表格(比如说:user_event_ref),它将存储用户和事件ID。

User: 
    id 
    name 

Event: 
    id 
    name 

UserEventRef: 
    user_id 
    event_id 

usereventref每一列是一个Foreign Key,和两列是主键的部分。

-1

总是有一个选项可以在事件表中添加一个tiny-int字段,将事件标记为收藏夹。这并不违反标准化,因为偶是否是最喜欢的对其他事件没有影响。如果事件被删除,它还​​具有从收藏夹中自动删除事件的附加好处。

如果收藏夹需要排序方案,您仍然可以用相同的方式修改事件表。如果需要关于“最喜爱的”的详细信息,例如何时将其添加到列表等,那么您应该使用建议的附加表格。

+1

是的,但如果我有很多用户呢?如果有许多用户选择相同的事件或用户选择多个事件,您的想法是否有效? – Vonder 2010-04-21 13:03:16

+0

除非您希望收藏夹为系统范围,否则这不起作用。我相信预期的功能是针对用户特定的收藏夹列表。 – chills42 2010-04-21 13:33:49

+0

当前的设计不允许将多个用户分配给单个事件。它支持一个用户参加很多活动。 – souLTower 2010-04-22 10:11:12