2017-10-21 24 views
-1

我懷疑這是其中一個問題,其中不會有一個確定的答案。但是我希望能夠對通常被認爲是最佳實踐的東西有所瞭解,但大多數情況下都是如此。所以,預先感謝那些重視此事的人。代表這些數據的模式會更好嗎?

我有兩種類型的文件夾用於存儲記錄。個人文件夾和團隊文件夾。

有兩種方法,我可以在數據庫中表示這個...

選項1:兩個獨立的和無關的文件夾表。

personalFolders(id, userId, title) 
teamFolders(id, teamId, title) 
records(id, folderId, folderType, title) 

選項2:有兩個常見的文件夾表連接的表

folders(id, title) 
personalFolders(folderId->folders.id, userId) 
teamFolders(folderId->folders.id, teamId) 
records(id, folderId->folders.id, title) 

我的問題是:一般情況下,什麼樣的模式將被認爲是最佳做法?

(我的直覺告訴我,去與選項2,因爲這樣我可以保持外鍵約束在表的記錄,但是,在那裏它可能是更好的去選擇1的情況呢?)

+0

個人文件夾和團隊文件夾可以具有相同的標題嗎?更一般的問題是:什麼是文件夾或每種不同類型文件夾的自然鍵? –

+0

@rd_nielson - 是的,他們可以擁有相同的標題。 ID是主鍵。 – trav

+0

因此,在您的選項2中,您是否會在標題上創建唯一索引,並且具有相同標題的個人文件夾和團隊文件夾使用相同的ID,還是允許兩個具有相同標題的不同ID?如果是後者,您是否計劃編寫觸發器以確保個人文件夾和團隊文件夾不都指向相同的ID?相關的,除了標題以外是否還有個人或團隊文件夾的其他屬性?後者是 –

回答

0

我真的做一個表格的文件夾,包含一列兩個帳戶及teamId:

folders (id, title, userId, teamId) 
records (id, folder.id, title) 

您可以確定如果文件夾是通過檢查userIdteamIdNULL個人文件夾或組文件夾或有價值。

這樣做的好處是,一個文件夾既可以是個人文件夾,也可以是團隊文件夾,而無需在兩個表中存儲相同的文件夾。你也可以在記錄表中有FK約束,你應該有。這將允許您輕鬆選擇所有文件夾(包括個人和團隊),無需任何聯合或聯合。

這與您的選項2基本相同,但它通過消除額外連接表的需要而簡化了它。

我個人認爲選項1沒有任何優勢,除非可能有大量數據並將它們分成單獨的表格可以提高性能。

+0

但我應該問過的一件事,如果一個文件夾可以屬於多個用戶或多個團隊,那麼這是行不通的,而且您想要使用您的選項2.但是,如果文件夾應該只屬於單個用戶或單個團隊,那麼沒有理由增加連接表的複雜性。 – patrick3853

+0

感謝您的回答,這對我提供的示例非常有意義。 你猜對了,其實文件夾可以屬於多個人,所以我想我會選擇2和連接。 – trav

+0

是的,如果用戶/團隊與文件夾是多對一的關係,那麼連接表是您唯一的選項來規範化數據並避免重複文件夾記錄。 – patrick3853

相關問題