2013-04-26 74 views
0

我需要設計一個數據庫系統中,如果有客戶廠商但是,每一個用戶或者是客戶或供應商他們都涉及到實體,稱爲用戶。 問題是,供應商與其他實體客戶不相關。 那麼我該如何設計這樣的數據庫呢?泛化數據庫

+1

不幸的是,這個問題是不適合做。請閱讀http://stackoverflow.com/faq – Barranka 2013-04-26 21:21:53

+0

這就是所謂的派對模特 – 2013-04-27 21:23:09

回答

0

其他實體會將供應商的ID作爲外鍵存儲。而廠商和客戶無論如何都不會在同一張表中*,所以它不像兩個ID都可以同時使用。

此外,如果您的數據庫允許,您需要爲用戶添加的外鍵可以作爲添加/編輯觸發器進行管理。這樣,您可以確保用於這些相關實體的供應商ID不是與客戶鏈接的用戶ID。 (...WHERE userid NOT IN (SELECT userid FROM users WHERE customer = TRUE)

*客戶和供應商有不同的屬性/字段,所以不應該在同一個表中。

+0

他們可以共享一組共同的信息,例如登錄信息到一個網站。 – Marvo 2013-04-26 21:46:51

+0

但問題是,有時我需要將兩個供應商和客戶鏈接到同一張表。 假設我想將供應商加入到名爲(Accounts) 的表中,並且我希望將客戶加入到同一張表(帳戶) 但是,每個帳戶記錄都應該鏈接到一個用戶(客戶或供應商)!我該如何解決這個問題? – wadda7j 2013-04-26 22:54:16

+0

我假設,當你加入'帳戶'表或者a)供應商和客戶不鏈接在同一記錄 - 所以帳戶中的'entityID'字段可以是客戶或供應商 - 在這種情況下,使用'userID '並且你有一個'customer = TRUE/FALSE'的字段。或b)如果供應商和客戶被鏈接在同一條記錄中,那麼明顯的'vendorID'和'customerID'字段(但我不認爲這就是你要求的,所以使用選項a)。 – aneroid 2013-04-29 07:12:55

0

您可以讓供應商和客戶與用戶表有關係。

user 
=========== 
userId 
name 

vendor 
=========== 
vendorId 
companyName 
userId 

customer 
=========== 
customerId 
source 
userId 

然後,您可以從同一個表中鏈接到客戶和供應商,但它們仍然可以在用戶表中共享相同的公用數據。事實上,一個客戶也可能是一個供應商。