MySQL数据库设计,包含多个表中的标记

时间:2014-05-29 00:33:12

标签: mysql sql database database-design

我正在开发一些应该使用相同用户表的网络应用程序。不同的应用程序都需要不同的表设计,所以我为每个应用程序创建了一个表,UserID是一个引用用户表的外键。

现在我想为所有应用添加标签。标签应位于每个应用程序的一个表中,以便轻松查询来自一个用户的所有标签(为了搜索目的,搜索应该能够找到标记有该标签的所有内容,无论应用程序如何)。就个人而言,我不认为将它们分成多个表是一个好主意,但我不是那样进入数据库设计所以我可能错了。我目前的尝试看起来像这样:

[标签]

EntryID | UserID | Tag

事实上,EntryID当然必须在使用此解决方案的所有应用程序表中都是唯一的。对于笔记应用程序我需要这样的东西:

[注释]

EntryID | UserID | title | content | etc.

对于我的日历,我有下表:

[日历]

EntryID | UserID | name | start | end | etc.

现在我不知道如何管理这些EntryID。我应该创建这样的另一个表

[条目]

EntryID | UserID | type

类型是“note”或“calendar”,而EntryID是主键吗?并且类型应该是整数或字符串,还是有可能引用类型列中的另一个表?我是否应该将app表中的EntryID转换为引用条目表的外键?

我将userID放在每个表中,因为我认为这会加快查询速度,例如当我需要一个用户在所有应用中设置的每个标记时。我知道规范化通常会禁止这种情况,但我再次认为它会极大地提高查询速度并减少MySQL服务器和后端的负载。

我很感激每一个提示构建这个,并提前感谢!

1 个答案:

答案 0 :(得分:0)

您可以使用继承,类似于:

enter image description here

我不确定用户应该在这里扮演什么样的角色。在上面的模型中,用户"拥有"一个条目和(推测)标记它。如果您希望多个用户(能够)标记相同的条目,则需要将USER连接到联结表TAG_ENTITY。

有关如何物理实现继承的更多信息,请参阅here

您可能也对thisthis感兴趣。