繁体   English   中英

MySQL数据库设计带有跨多个表的标签

[英]MySQL Database Design with tags across multiple tables

我正在使用一些应该使用相同用户表的Web应用程序。 不同的应用程序都需要不同的表设计,因此我为每个应用程序创建了一个表,其中UserID是引用用户表的外键。

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

[标签]

EntryID | UserID | Tag

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

[笔记]

EntryID | UserID | title | content | etc.

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

[日历]

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

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

[条目]

EntryID | UserID | type

类型是“ note”或“ calendar”,而EntryID是主键? 并且类型应该是整数还是字符串,还是可以引用类型列中的另一个表? 然后我应该将应用程序表中的EntryID变成引用表项表的外键吗?

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

感谢您为构建此结构提供的所有技巧,并在此先感谢!

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

在此处输入图片说明

我不确定用户的角色应该在这里。 在上面的模型中,用户“拥有”一个条目并(大概)对其进行标记。 如果希望多个用户(能够)标记同一个条目,则需要将USER连接到联结表TAG_ENTITY。

有关如何物理实现继承的更多信息,请参见此处

您还可能有兴趣在这个这个

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM