設計引用來自另一個表的多個記錄的表的最佳方式是什麼?用於編譯來自另一個表的記錄的數據庫設計
例如,有一個稱爲日記的表格,用於存儲主題,描述和關鍵字,然後是另一個稱爲DiaryCompilation的表格,用於通過引用日記中的ID將所有選定的記錄組合到一本書中。
什麼是創建DiaryCompilation的最佳方式?
我想由它分成兩個字段:ID,在所有選定的記錄的引用
,其中被放置在引用,但它是一個很好的做法還是有更好的方法?
設計引用來自另一個表的多個記錄的表的最佳方式是什麼?用於編譯來自另一個表的記錄的數據庫設計
例如,有一個稱爲日記的表格,用於存儲主題,描述和關鍵字,然後是另一個稱爲DiaryCompilation的表格,用於通過引用日記中的ID將所有選定的記錄組合到一本書中。
什麼是創建DiaryCompilation的最佳方式?
我想由它分成兩個字段:ID,在所有選定的記錄的引用
,其中被放置在引用,但它是一個很好的做法還是有更好的方法?
<--- 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
日記和日記的編譯會有一對多的關係。只要確保DairyCompilation中的Id設置爲主鍵,並在其上放置一個外鍵約束,以便它與日記表中的Id關聯。這將阻止您刪除DiaryCompilation表中的日記和孤立記錄。只要你有一個標準化的數據模型,你應該沒問題。
保持您的領域原子。在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
)
什麼是創造DiaryCompilation的最佳方式?
聽起來像最好方式可能是使用視圖而不是表。