我应该使用Django的通用外键,以及如何使用?

时间:2014-08-17 17:06:22

标签: database django foreign-keys comments

我有php web编程背景,是Django的新手。我正在帮助我的兄弟建立一个管理库存的在线系统,我有一个数据库设计&最近的编码问题。需要帮助!

如何将“评论”表附加到一个或多个表中?

也就是说,我有一组“可能的产品”,“库存”,“供应商”等表格。我想在每个表格中添加“评论”,其中“评论”包含所有评论他们的记录。因此,我认为我应该制作一个通用的“评论”表来保存产品,库存,供应商的所有评论。是吗?

我的表格的概念模型:

possible_products

id: int (pk)
name: varchar
url: varchar
price: decimal
created_at: datetime
updated_at: datetime

评论

id: int (pk)
parent_id: int (fk)
content: text
author: int (fk)
table: char (which the table this comment belongs to)
created_at: datetime
updated_at: datatime

我的问题是,当“possible_products”表是“comment”的父级时,父级的外键(id号)存储在“comment”表中以便链接它们。

但是,“库存”表和“供应商”表的fk怎么样?它不应该是:我在“comments”表中再创建了2个“inventory_id”列和“suppiler_id”列。 (也就是说,当我想链接第4个父表时,我不应该创建第4列。)

那么,我应该使用Django的通用外键吗? (这样,我的“评论”表设计是正确的。)以及如何使用/实现它?

或者,我是否应该更好地制作一个带有外键的中间表来链接“可能的产品”/“库存”/“卖家”和“评论”?(在设计上...就像很多 - 很多关系)

P.S。我主要在Django Admin中开发系统。使用Python 3.4& Django 1.7rc2。

1 个答案:

答案 0 :(得分:0)

首先,你不应该考虑数据库列:你应该考虑Django模型。

这确实是通用关系的用途。而不是从Comment到每个单独模型的外键,您有一个ContentType模型的外键 - 它标识模型类型,而不是实例 - 以及一个存储相关模型的实际ID的object_id字段。这一点在generic relations documentation中都得到了很好的解释。

注意:如果您的模型将链接到非常具体且有限的一组父母'对于模型来说,为它所链接的每个模型添加一个外键可能更简单。