Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 如何处理具有多个父级的表_Mysql_Database_Data Modeling - Fatal编程技术网

Mysql 如何处理具有多个父级的表

Mysql 如何处理具有多个父级的表,mysql,database,data-modeling,Mysql,Database,Data Modeling,我对正在处理的特定数据库结构建模有困难。简而言之,考虑到以下几点: 网页上可以有一个或多个线程 一个线程由一个或多个注释组成 评论可以有一个或多个针对它的投诉 投诉也可以针对整个线程提出 也可以对该页面提出投诉 我不太明白如何在DB级别对此进行建模。前三个很简单: webpage ---------- id name thread --------- id page_id name comment -------- id thread_id name 但是,如果我想要一个单一的投诉表,

我对正在处理的特定数据库结构建模有困难。简而言之,考虑到以下几点:

  • 网页上可以有一个或多个线程
  • 一个线程由一个或多个注释组成
  • 评论可以有一个或多个针对它的投诉
  • 投诉也可以针对整个线程提出
  • 也可以对该页面提出投诉
我不太明白如何在DB级别对此进行建模。前三个很简单:

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个表(网页、线程、注释)具有超类型/子类型关系:


这样,创建新网页(或线程或注释)或删除一个网页将稍微复杂一些(在两个表中插入或删除新行,而不是一个表)。

另一种方法是创建一个新的
实体
表,该表与三个表(网页、线程、注释)具有超类型/子类型关系:


这样,创建一个新网页(或帖子或评论)或删除一个网页会稍微复杂一些(在两个表中插入或删除新行,而不是一个表)。

奇怪的是,我玩弄了这个想法。我认为让人厌烦的是创建实体。实体将对象绑定在一起,但管理和维护起来会很棘手。不过,谢谢你的反馈!奇怪的是,我玩弄了这个主意。我认为让人厌烦的是创建实体。实体将对象绑定在一起,但管理和维护起来会很棘手。不过,谢谢你的反馈!我想这就行了。我希望避免为每种类型的关系使用不同的表,但这比为每种关系使用不同的列并在所有地方使用空列要好。谢谢你的反馈!我想这就行了。我希望避免为每种类型的关系使用不同的表,但这比为每种关系使用不同的列并在所有地方使用空列要好。谢谢你的反馈!