2009-12-15 130 views
0

我有3個表:A,B和C. 表A與B和C的關係(n:1)。 通常我在A中存儲B.Id(或C.Id )和表名。表之間的關係

例如

A.ParentId = 1 
A.TableName = "B" 

A.ParentId = 1 
A.TableName = "C" 

A.ParentId = 2 
A.TableName = "B" 

這是一個很好的解決方案嗎?還有其他解決方案嗎?

回答

1

爲什麼不是2列的列?

A.ParentIdB = 1
A.ParentIdC = 3

+0

因爲它不可擴展:假設有n個與A相關的表,您必須創建n列。 – user232028 2009-12-15 11:33:57

0

另一種可能性是引入另一種表內容(d),用作一個 「超」 到職位和圖像。然後,評論(A)中的一行將引用帖子(B)和圖片(D)中的每一行中的主鍵。文章和圖片中的任何常見字段都將被移至內容(也許是「標題」或「日期」),那些原始表格將僅包含特定於帖子或圖片的信息(可能是「主體」或「分辨率」)。這可以使執行連接比在一個字段中使用表名更容易,但這確實意味着真實世界的實體既可以是帖子也可以是評論(或者實際上,可以是帖子或評論的倍增!)。不過,真的,這取決於你試圖建模的情況。

+0

聽起來不錯。但幫助我理解。假設有4個表:評論(A),超類型(D),帖子(B)和圖像(C)。例如,檢索所有相關評論很簡單,但如果我需要通過評論檢索特定信息(來自帖子(B)或圖片(C))? – user232028 2009-12-15 11:57:04

+0

假設您想要選擇與A中最後一條記錄相關的特定信息(存儲在B或C或...中),您怎麼能這樣做? – user232028 2009-12-15 13:10:26

+0

如果您不知道A是否連接到B或C,則必須執行如下操作:A內連接D左外連接B左外連接C,其中連接位於相應的鍵上,然後查看應用程序中的字段以確定A是否鏈接到B或C.您可以通過以適當的順序排列A的鍵或插入日期並獲取最後一條記錄來獲取最後一條記錄。 – Rich 2009-12-15 15:27:24