【问题标题】:Database: what design to have a "document table" referencing others tables数据库:有一个“文档表”引用其他表的设计是什么
【发布时间】:2015-12-01 12:37:11
【问题描述】:

我有一些表格可以包含0..* 文档。

如何在不指定document 表中的表字段的情况下设计我的数据模型?随意建议by editing the data model


(来源:yuml.me

【问题讨论】:

  • 这听起来像是标准规范化。请将“my_table”更改为“Authors”和“Contents”等特定示例——IF 这就是您的想法。否则它看起来像一个糟糕的架构。
  • @RickJames "my_table_n" 仅作为示例。这些表之间没有像上面的更新那样的关系:汽车、房子、水果、作者……我认为可以通过添加一些“父”表来避免在文档表中指定表 FK表可以继承。

标签: mysql database database-design data-modeling


【解决方案1】:

我有一些表格可以有 0..* 个文档。

我假设 car、house、fruit、author ... 是一些包含文档的表。
我建议为这些元素创建一个名为 Documentary 的父表。该记录表与所有这些表的关系为零或一。记录表中的记录将在其他表之一中显示一条且仅一条记录。
记录表将具有显示其相关记录类型的类型字段。

在文档表中添加 Documentary 的 FK 即可解决此问题。
(在 OOP 术语中,纪录片将是一个抽象实体)

【讨论】:

  • @Mosen Heydari 感谢您的回答。您的解决方案是我收到的最好的,应该可以工作。
【解决方案2】:

你应该试试这种模式

【讨论】:

  • 谢谢,但真正的表名不是 my_table_X。此外,我想在我的表格上拥有一个来自文档表格的外键,这在您的设计中是不可能的
  • 好的。将 table_num 字段更改为 table_name 并在该字段中保留您各自的 my_table_X 的名称可以完成这项工作吗?
  • 感谢您的回答,但在这种情况下,DBMS 不会强制执行 FK 的完整性。
【解决方案3】:

大概每个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

【讨论】:

  • 感谢@Ollie Jones。事实上,由于我可以拥有无​​限数量的文档,my_table_n 表不引用文档,但文档表引用 my_table_n。在我的文档表中,我希望 my_table_n 上有外键,但我不希望每个 my_table_n 都有一个专用字段。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-16
  • 1970-01-01
  • 2011-04-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多