1

我正在使用 django 并拥有三个对象:客户、位置和部门。每个都有一个相关的设置对象。

使用可选/空外键创建单个表是否更好?

或者为 3 个实体中的每一个创建不同的设置对象/表?

4

1 回答 1

1

有几个选项

  1. 创建一个单独的 Settings 表,并从您的所有对象到 Settings 表有一个可为空的 ForeignKey。如果选择此选项,则应创建一个抽象基类,该基类具有 Settings 表的 ForeignKey 并从该抽象基类继承。这样您就不必每次创建新模型时都添加 ForeignKey。

  2. 创建一个单独的 Settings 表并使用Settings 表中的GenericForeignKeys来引用您的对象(客户、位置和部门)。这样做的好处是在所有需要设置的表中都没有额外的列。但是,您不能通过 Django ORM 的普通 API 使用 GenericForeignKeys 进行 DB 连接。您必须使用原始 sql。此外, select_related 不适用于 GenericForeignKeys,因此您必须改用 prefetch_related 。

  3. 将设置存储在数据库的列中。您应该以某种格式(我喜欢 JSON)与数据进行交互,然后将其序列化为字符串以存储在数据库中。然后要读取设置,您可以将字符串反序列化回 JSON 并与之交互。使用这种方法,您不需要加入另一个表来获取设置,也不需要在每次添加新设置时运行迁移。您也不需要单独的设置表。但是,构造一个查询来查找具有某些设置的对象会很痛苦,查询也可能很慢。

每个选项都有其优点和缺点;所以,选择你的毒药;)

于 2013-07-28T06:43:30.120 回答