2013-09-26 29 views
2

我有一個橋表book_personbookperson之間提供多對多的關係。在這張表中我還有角色定義,用來設置某個人對特定書籍的角色(作者,編輯,插圖畫家,譯者等)。現在我考慮將角色拆分爲單獨的角色表(如book_authorbook_translator等)。但我懷疑,這是不是好主意?對於專業人士來說,它使數據庫更加乾淨,並且我看到DBIC模式加載程序檢測到這樣簡單的橋接表併爲我創建了多對多訪問器。對於缺點我看到角色的聚合函數需要更多的連接。在一體化表中使用單獨的角色橋表有什麼好處?

使用單獨的角色橋接方式而不是一體化角色橋接方式有什麼好處?什麼是缺點?我正在嘗試使用ORM(DBIx :: Class)升級我的應用程序,但尚未很好地瞭解它,因此對它的考慮也非常受歡迎。

回答

2
create table book (
    id_book integer primary key, 
    name_book text, 
    author_book 
); 

create table person (
    id_person integer primary key, 
    name_person text 
); 

create table book_person (
    id_person integer, 
    id_book integer, 
    role_person text, 
    primary key (id_person, id_book) 
); 

我覺得在book_person表使用的角色是一個不錯的選擇,如果一個人只有一個角色,因爲:

  1. 只是有你使用的一些角色。
  2. 如果創建了一些更多的表,比如book_author,book_translator,當你可以做到時,
  3. 你不需要使用你說的許多加入。
  4. 角色在你的情況下只是一個屬性,如果你沒有保留一些關於角色功能的額外信息,你不應該創建一個表來保持綁定角色人物。你已經把它保存在book_person中。

您需要創建另一個表的作用,如果您有:

  1. 一個人有一個以上的角色。
  2. 如上所述,您保留了一些關於角色的額外信息。

我想這就是全部。

2

鑑於一個人可以有多個角色的書,我會創建一個單獨的表(如book_person_role)與person-id/book-id作爲外鍵和角色ID。因此,您可以獲得從book_person到book_person_role的一對多關係。我不會爲每個角色創建一個表;這意味着在添加/刪除/更改角色時更改架構。

+0

我看到,與單獨的表我會有自由添加更多的角色。我有一套非常封閉的角色,所以這不是一個需要(我在book_person-table中爲每個角色使用了一點),但是它會很好。 –

相關問題