2015-09-05 71 views
0

我有一些表可以有0..*文档。数据库:什么设计有一个“文档表”引用其他表

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

enter image description here

+0

这听起来像标准归一化。请将“my_table”更改为“作者”和“内容”之类的特定示例 - _IF_,这就是您的想法。否则,它看起来像一个可怕的模式。 –

+0

@RickJames“my_table_n”只是在这里作为例子。这些表之间没有任何关系,像上面的更新:汽车,房子,水果,作者,...我认为可以有一个设计,以避免指定表FK在文档表中添加一些“父”表,其他表可以继承。 – sdespont

回答

1

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

我假设汽车,房子,水果,作者...是一些有文件的表格。
我会建议为这些元素创建一个名为Documentary的父表。这个记录表与所有这些表有零或一的关系。记录表中的记录将在其他表格中的一个记录中仅显示一条记录。
记录表格将具有显示其相关记录类型的类型字段。

文件表中有文件的FK将解决问题。
(在OOP术语纪录片将是一个抽象的实体)

enter image description here

+0

@Mosen Heydari谢谢你的回答。你的解决方案是我收到的最好的,应该工作。 – sdespont

+0

欢迎您朋友。 –

1

你应该尝试这种模式的

enter image description here

+0

谢谢,但真正的表名不是my_table_X。此外,我想从我的表格上的文档表中获得一个外键,这对您的设计来说是不可能的。 – sdespont

+0

好的。是否将table_num字段更改为table_name并将相应字段my_table_X的名称保存在该字段中? – mynawaz

+0

感谢您的回答,但在这种情况下,FK的完整性不会由DBMS强制执行。 – sdespont

0

想必每个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 
+0

谢谢@Ollie Jones。事实上,由于我可以有无限数量的文档,my_table_n表不会引用文档,但文档表引用my_table_n。在我的文档表中,我希望在my_table_n上有外键,但我不想为每个my_table_n指定一个专用字段。 – sdespont