2011-03-14 27 views
0

我正在構建一個可以擁有多個帳戶的多個用戶的應用程序。例如,一個帳戶可以是ABC公司。用戶X,Y和Z是此帳戶的成員。每個帳戶都應有自己的獨立實例,以便如果公司ABC創建新的數據庫項目,則只應由公司ABC顯示和管理。我的問題是這樣的:我必須在數據庫中的每個表中對帳戶進行明確的外鍵引用嗎?例如:管理SQL中的多個帳戶和用戶以及與帳戶關聯的資產

表 - ACCOUNTS

ACCOUNT_ID | ACCOUNT_NAME 
1234  | Company ABC 

表 - PAGES

PAGE_ID | PAGE_TITLE | ACCOUNT_ID 
987  | My Page | 1234 

表 - 資產

ASSET_ID | ASSET_TITLE | ACCOUNT_ID 
4443  | My Asset | 1234 

表 - 羣

GROUP_ID | GROUP_NAME | ACCOUNT_ID 
8888  | Admins  | 1234 

等?

這對我來說似乎是錯誤的,因爲某些原因,我覺得有一種更好的方式,我沒有想到。我有將近75張桌子,我需要這樣做。這是正確的嗎?

+0

對於一對多關係,最簡單的方法是將帳號ID添加到子表中。 – 2011-03-14 17:01:50

回答

1

我不得不面對這種情況,很可能您必須在許多表(儘管不一定全部)包含ACCOUNT_ID列。另一種方法是爲每個帳戶設置不同的數據庫。這可能會導致維護問題,因爲您必須確保對DDL和DML的所有更改得到普遍應用。它也可能導致性能問題。將列應用於每個表格確實(略微)使查詢連接和數據所需的視圖複雜化,但在性能和空間方面,連接的成本通常很低(或沒有)。獨立數據庫的一個優點是,它可能是一個更安全的解決方案 - 隔離所有其他帳戶。

我建議不是所有的表都需要帳號列。這需要取決於訪問路徑。 - 例如,我有我的表中表達的子/超類型關係。每個子類型和每個超類型都有自己的表格。對所有子類型的訪問只能通過超類型,所以超類型需要引用ACCOUNTS,但子類型不需要。

編輯: My question並在其上的答案和評論,關於這種類型的領導到我的上述結論的設計問題。

+0

謝謝克里斯。您的回覆和原始問題非常有用,並確認了我選擇的方向。 – Freddie 2011-03-26 17:18:49