2015-09-05 49 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

相關問題