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

标签 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 是主键?类型应该是整数还是字符串,或者是否有可能引用类型列中的另一个表?然后我是否应该将应用表中的 EntryID 转换为引用条目表的外键?

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

我将不胜感激构建此结构的每一个提示,并提前致谢!

最佳答案

你可以使用继承,类似这样:

enter image description here

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

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

您可能还对 this 感兴趣和 this .

关于具有跨多个表的标签的 MySQL 数据库设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23923985/

相关文章:

sql - Postgresql:违反检查约束。失败的行包含

Oracle:将 VARCHAR2 列更改为 CLOB

MySQL计算零的总数

sql - 从 n 个表中选择 *

php - mysql查询运行缓慢

sql - LIKE '[A-D]%' 有什么区别?和介于 'A' 和 'D' 之间;在 SQL Server 中

mysql - Order by 子句混淆

sql - 启用 RLS(行级安全性)时 PostgreSQL 查询不使用 INDEX

php - 如何将 SQL 连接传递给另一个 php

mysql - 如何通过 CASE 语句中的变量对结果进行排序