2014-10-30 33 views
0

我正在編寫一個web應用程序,無法弄清以下兩種方法中的哪一種應該採取。 想象5個表:A,B,C,d,和E.

選項1: 使用ID作爲外鍵,然後它看起來像這樣:
表A:ID,FIELD1,FIELD2,。 ..
tableB的:tableA_id,字段1,字段2,...
表C:tableB_id,字段1,字段2,...等...

選項2: 創建新列將作爲外鍵,然後它看起來像這樣:
表A:ID,字段1,字段2,...
tableB的:IDtableA_id,字段1,字段2,...
表C:IDtableB_id,字段1,字段2,...等...

我認爲,當我們調用tableB的ID字段被命名爲逸岸,但tableA_id我可能是錯了,所以選擇1可能會有點混亂如果有人啓發我,我會很高興。
另外,如果選項2是要走的路,在主鍵上連接表有什麼意義?

編輯:我想實現是這樣的:
帳戶
......性格
......項目
......消息
... ...其他的東西帶OneToOne註釋的數據庫結構

+0

你想模擬一棵樹嗎? – Leo 2014-10-30 22:14:43

+0

我不這麼認爲。我只是想弄清楚哪種方式是正確的。在我的情況下,有帳戶表,其中只包含1個字符,例如項目表,消息等等。 – Sikor 2014-10-30 22:20:07

回答

0

我結束了創建新列的外鍵(選項2 )只是因爲它不那麼令人困惑。
感謝您的建議,但我很感激。

0

我想「選項2」,雖然你可能需要對你的目標更具體些。我可能會建議一個選項3:

TableX: id, A_id, B_id, C_id, D_id, E_id 

則:

Table_A: id, col1, col2 
Table_B: id, colX, colY 
Table_C: id, thing1 
Table_D: id, more_col 
Table_E: id, xxx 

然後,它只是一個簡單的連接:

SELECT A.col1, B.colX, C.thing1, D.more_col, E.xxx 
    FROM TableX X 
    LEFT JOIN Table_A as A on X.A_id = A.id 
    LEFT JOIN Table_B as B on X.B_id = B.id 
    . 
    . 
    . 
+0

這是一個有趣的解決方案,但在Spring數據中,我不會手動執行任何SQL,而只需要調用存儲庫適當的函數和hibernate爲我做這個,所以我必須一直調用TableX。我也更新了我試圖達到的目標。 – Sikor 2014-10-30 22:56:21