我无法为我正在处理的特定数据库结构建模。简而言之,考虑以下因素:
我无法弄清楚如何在数据库级别对此进行建模。前三个很容易:
webpage
----------
id
name
thread
---------
id
page_id
name
comment
--------
id
thread_id
name
但如果我想要一个投诉表,那么一个模型怎么样呢?我认为你不想这样做:
complaint
----------
id
page_id
thread_id
comment_id
如果您添加了新的对象类型,例如图片,则必须在投诉中添加更多列。有没有更好的方法来做到这一点,或者是否达到最佳状态?
提前致谢, - 安东尼
答案 0 :(得分:1)
我会将投诉作为一个实体创建,然后在它可以关联的所有不同事物之间建立链接表。
所以,我有以下表格......
这是Waleed解决方案略有不同的变化。与所有这样的事情一样,有很多方法可以解决它:)
此方法的优点是您可以使用外键来维护数据完整性。缺点是,无论何时你需要投诉新的“东西”,你都需要一个新的链接表,但我想你无论如何都必须创建一个新的“东西”表。
答案 1 :(得分:0)
我头顶的一个解决方案是拥有一张桌子:
ObjectType
-------------------
| id | name |
-------------------
| 1 | Webpage |
| 2 | Thread |
| 3 | Comment |
-------------------
然后您的投诉表如下:
----------------------------------------
| id | object_type_id | objectid |
----------------------------------------
| 1 | 1 | 1 |
| 2 | 1 | 2 |
| 3 | 2 | 1 |
---------------------------------------|
当然,这可以在以后查询投诉表和加入其他人时添加额外的工作,但这完全取决于您要查询的内容。
答案 2 :(得分:0)
另一种方法是让一个新的entity
表与3个表(网页,线程,注释)具有超类型/子类型关系:
entity
----------
id (PK)
webpage
----------
id (PK)
name
FOREIGN KEY id REFERENCES entity(id)
thread
---------
id (PK)
page_id
name
FOREIGN KEY id REFERENCES entity(id)
comment
--------
id (PK)
thread_id
name
FOREIGN KEY id REFERENCES entity(id)
complaint
----------
id (PK)
entity_id
FOREIGN KEY entity_id REFERENCES entity(id)
这样,创建新网页(或线程或注释)或删除一个网页会稍微复杂一些(在两个表中插入或删除一行而不是一行。)