Mysql 如何处理具有多个父级的表
我对正在处理的特定数据库结构建模有困难。简而言之,考虑到以下几点:Mysql 如何处理具有多个父级的表,mysql,database,data-modeling,Mysql,Database,Data Modeling,我对正在处理的特定数据库结构建模有困难。简而言之,考虑到以下几点: 网页上可以有一个或多个线程 一个线程由一个或多个注释组成 评论可以有一个或多个针对它的投诉 投诉也可以针对整个线程提出 也可以对该页面提出投诉 我不太明白如何在DB级别对此进行建模。前三个很简单: webpage ---------- id name thread --------- id page_id name comment -------- id thread_id name 但是,如果我想要一个单一的投诉表,
- 网页上可以有一个或多个线程
- 一个线程由一个或多个注释组成
- 评论可以有一个或多个针对它的投诉
- 投诉也可以针对整个线程提出
- 也可以对该页面提出投诉
webpage
----------
id
name
thread
---------
id
page_id
name
comment
--------
id
thread_id
name
但是,如果我想要一个单一的投诉表,一个如何建模呢?我不认为你会想做:
complaint
----------
id
page_id
thread_id
comment_id
如果您添加了一个新的对象类型,如picture,则必须在投诉中添加更多列。有没有更好的方法来做到这一点,或者是尽可能地好
提前感谢,,
-安东尼我脑子里想不出的一个解决办法是有一张桌子:
ObjectType
-------------------
| id | name |
-------------------
| 1 | Webpage |
| 2 | Thread |
| 3 | Comment |
-------------------
那么您的投诉表可以如下所示:
----------------------------------------
| id | object_type_id | objectid |
----------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
---------------------------------------|
当然,这可能会在以后查询投诉表并加入其他投诉表时增加额外的工作,但这一切都取决于您想要查询的内容。我想到的一个解决方案是有一个表:
ObjectType
-------------------
| id | name |
-------------------
| 1 | Webpage |
| 2 | Thread |
| 3 | Comment |
-------------------
那么您的投诉表可以如下所示:
----------------------------------------
| id | object_type_id | objectid |
----------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
---------------------------------------|
当然,这可能会在以后查询投诉表并与其他投诉表连接时增加额外的工作,但这一切都取决于您要查询的内容。我将自己创建投诉作为一个实体,然后在与之关联的所有不同事物之间创建一个链接表 所以,我有以下表格
- 抱怨
- 符合要求的注释链接
- 投诉线程链接
- 投诉页面链接
这种方法的优点是可以使用外键来维护数据完整性。缺点是,每当你需要投诉一个新的“事物”时,你都需要一个新的链接表,但我想你无论如何都必须创建一个新的“事物”表。我会自己创建一个实体投诉,然后在它可以关联的所有不同事物之间创建一个链接表 所以,我有以下表格
- 抱怨
- 符合要求的注释链接
- 投诉线程链接
- 投诉页面链接
这种方法的优点是可以使用外键来维护数据完整性。缺点是,每当您需要投诉一个新的“东西”时,您都需要一个新的链接表,但我想您无论如何都必须创建一个新的“东西”表。另一种方法是创建一个新的
实体
表,该表与3个表(网页、线程、注释)具有超类型/子类型关系:
这样,创建新网页(或线程或注释)或删除一个网页将稍微复杂一些(在两个表中插入或删除新行,而不是一个表)。另一种方法是创建一个新的
实体
表,该表与三个表(网页、线程、注释)具有超类型/子类型关系:
这样,创建一个新网页(或帖子或评论)或删除一个网页会稍微复杂一些(在两个表中插入或删除新行,而不是一个表)。奇怪的是,我玩弄了这个想法。我认为让人厌烦的是创建实体。实体将对象绑定在一起,但管理和维护起来会很棘手。不过,谢谢你的反馈!奇怪的是,我玩弄了这个主意。我认为让人厌烦的是创建实体。实体将对象绑定在一起,但管理和维护起来会很棘手。不过,谢谢你的反馈!我想这就行了。我希望避免为每种类型的关系使用不同的表,但这比为每种关系使用不同的列并在所有地方使用空列要好。谢谢你的反馈!我想这就行了。我希望避免为每种类型的关系使用不同的表,但这比为每种关系使用不同的列并在所有地方使用空列要好。谢谢你的反馈!