如何设计这个简单的数据库?

时间:2010-04-21 12:36:47

标签: mysql database-design foreign-keys field entity-relationship

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

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:0)

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

您需要额外的表格(例如:user_event_ref)来存储用户和事件ID。

User:
  id
  name

Event:
  id
  name

UserEventRef:
  user_id
  event_id

usereventref中,每列都是Foreign Key,两列都是主键的一部分。

答案 2 :(得分:-1)

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

如果收藏夹需要排序方案,您仍然可以以相同的方式修改事件表。如果需要有关“收藏夹”的详细信息,例如当它被添加到列表中时等,那么您应该使用建议的附加表。