2011-10-16 58 views
0

設計引用來自另一個表的多個記錄的表的最佳方式是什麼?用於編譯來自另一個表的記錄的數據庫設計

例如,有一個稱爲日記的表格,用於存儲主題,描述和關鍵字,然後是另一個稱爲DiaryCompilation的表格,用於通過引用日記中的ID將所有選定的記錄組合到一本書中。

什麼是創建DiaryCompilation的最佳方式?

我想由它分成兩個字段:ID,在所有選定的記錄的引用

,其中被放置在引用,但它是一個很好的做法還是有更好的方法?

回答

0
<--- Each record is a new entry of diary ---> 
Diary: ID, Subject, Description, Keywords 

<--- Single record per compilation for summary info ---> 
DiaryCompilation: ID, Title 

<--- Pages of Diary Compilation ---> 
DiaryCompilationEntries: DiaryCompilationID, DiaryID 
0

日記和日記的編譯會有一對多的關係。只要確保DairyCompilation中的Id設置爲主鍵,並在其上放置一個外鍵約束,以便它與日記表中的Id關聯。這將阻止您刪除DiaryCompilation表中的日記和孤立記錄。只要你有一個標準化的數據模型,你應該沒問題。

0

保持您的領域原子。在references字段中放置幾個​​值會使查詢和強制引用約束變得更加困難。

通過將父母的主關鍵字遷移到子女來模擬父母與子女之間的1:N關係。對你來說,這將是這個樣子:

COMPILATION (
    COMPILATION_ID   PK 
    -- Other fields... 
) 

DIARY (
    DIARY_ID    PK 
    COMPILATION_ID   FK(COMPILATION) 
    SUBJECT 
    DESCRIPTION 
) 

-- Not a good idea to have several keywords in a single field, so we need a separate table for keywords. 
DIARY_KEYWORD (
    DIARY_ID    PK, FK(DIARY) 
    KEYWORD    PK 
) 

如果你真的想要N:N的關係(即日記可超過一個編譯的一部分),你需要一個專門的表來保存這些連接,這樣的事情:

COMPILATION (
    COMPILATION_ID   PK 
) 

DIARY_IN_COMPILATION (
    COMPILATION_ID   PK, FK(COMPILATION) 
    DIARY_ID    PK, FK(DIARY) 
) 

DIARY (
    DIARY_ID PK 
    SUBJECT 
    DESCRIPTION 
) 

DIARY_KEYWORD (
    DIARY_ID    PK, FK(DIARY) 
    KEYWORD    PK 
) 
0

什麼是創造DiaryCompilation的最佳方式?

聽起來像最好方式可能是使用視圖而不是表。

相關問題