数据库:什么设计有一个 "document table" 引用其他表

Database: what design to have a "document table" referencing others tables

我有一些 table 可以有 0..* 文件。

如何在不指定 document table 中的 table 字段的情况下设计我的数据模型?欢迎提出建议by editing the data model


(来源:yuml.me

你应该试试这种模式

大概您的每个 my_table_n 表都包含引用不同文档的行。您可以像这样格式化这些行:

 id            (surrogate PK)
 document_id   (FK to document table)
 data          whatever information you need in this table.

然后,您可以获取包含额外数据的文档,如下所示:

 SELECT d.something, d.another_thing,
        t1.data, t2.other_data, t3.more_data, t4.too_much_data
   FROM document d
   LEFT JOIN mytable_1 t1 ON d.id = t1.document_id
   LEFT JOIN mytable_2 t2 ON d.id = t2.document_id
   LEFT JOIN mytable_3 t3 ON d.id = t3.document_id
   LEFT JOIN mytable_4 t4 ON d.id = t4.document_id

I have some tables which can have 0..* documents.

我假设汽车、房子、水果、作者...是一些 table 有文件的人。
我建议有一个 parent table为这些元素调用 Documentary。这部纪录片 table 将与所有这些 table 有 zero-or-one 关系。纪录片 table 中的一条记录将在其他 table 中显示一条记录。
纪录片 table 将有一个类型字段显示其相关记录类型。

在 document table 中拥有 Documentary 的 FK 将解决问题。
(在 OOP 术语中,Documentary 将是一个抽象实体)