【问题标题】:How to design this simple database?如何设计这个简单的数据库?
【发布时间】:2010-04-21 12:36:46
【问题描述】:

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

【问题讨论】:

  • 创建第三个表来存储用户每个喜欢的事件的 userid/eventid 组合。

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


【解决方案1】:

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

用户表:

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

【讨论】:

  • 为什么在Favorites 表中添加id 列?没用。
  • 你能告诉我外键关系应该是什么样子吗?
  • 在 user_id 和 event_id 是这个例子中的外键。正如您在 SQL 中看到的那样,它们与 users.id 和 events.id(主键)相关。
【解决方案2】:

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

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

User:
  id
  name

Event:
  id
  name

UserEventRef:
  user_id
  event_id

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 是的,但是如果我有很多用户怎么办?如果有很多用户会选择同一个事件或用户选择多个事件,你的想法是否可行?
    • 这不起作用,除非您希望收藏夹在系统范围内。我相信预期的功能是针对用户特定的收藏夹列表。
    • 当前设计不允许将多个用户分配给单个事件。它支持一个用户处理多个事件。
    猜你喜欢
    • 2017-12-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-09
    • 2014-01-03
    • 1970-01-01
    • 1970-01-01
    • 2011-02-17
    • 1970-01-01
    相关资源
    最近更新 更多