這似乎有很多你正在開發的系統,可能有你沒有提到的要求,所以它是不可能拿出一個完整的答案。但希望下面的一些內容能幫助你在描述時「設計概念化」。
1)這是一種非常常見的情況,有很多處理這些多對多關係的標準方法。
如果有2個實體A和B具有多對多關係,那麼您通常會引入一個由2列組成的實體C--一個是A的唯一ID的外鍵,另一個是外鍵到B的唯一ID。並且您將刪除實體A中指向B的外鍵列,反之亦然。
i。Ë
|-----|
| A |
|-----|
\|/
|
|
/|\
|-----|
| B |
|-----|
變爲:
|-----| |-----|
| A | | B |
|-----| |-----|
| |
| |
| |
/|\ /|\
|-------------|
| C |
|-------------|
的主要挑戰是什麼經常稱這些新的實體!有時他們可能只是像a_b_relationship,但如果能識別更有意義的名字是很好的。
2)看起來你需要做更多的分析來識別所有的實體。這樣做的一種方法是通過對系統的描述並識別名詞 - 通常如果描述中有名詞,則適合在實體 - 關係圖中包含實體。
「Order」作爲您忽略的名詞跳出。
通常對於訂單處理,您將有2個實體 - 包含日期,總價值,客戶等的訂單以及標識訂購了多少產品以及單個價格的子訂單行。所以在電子商務中,購物車就是訂單,而購物車中的每件商品都是訂單記錄。
在您的情況,我們就會有:
|----------| |-----------|
| client | | product |
|----------| |-----------|
| |
| |
| |
/|\ /|\
|-------------| /|-------------|
| order |--------| orderline |
|-------------| \|-------------|
3)客戶銷售各類產品
在這裏,你要識別客戶端的其他角色,什麼我在這裏做的是問題,即是否「客戶「在這個階段是一個合適的實體。您可能會發現在「買方」和「賣方」方面進行思考比較容易,直到理解了首次設計。如果買賣雙方有很多共同點(特別是如果一個人既可以是買方也可以是賣方),那麼您最終可能決定使用單一實體。您的ERD工具可能會爲此提供支持 - 搜索「子類型實體」或「實體子類型」。
細節將取決於您的實際應用,但可能是每個訂單行應與賣方有關係,並且訂單與買方的關係。這將取決於例如買方是否有可能訂購特定產品的多個項目,其中一些來自一個賣方而另一個來自另一個賣方。它可能變得複雜!
此外,考慮是否需要在銷售之前記錄賣家的股票可能會有所幫助。這裏區分「產品」和「庫存」可能是有用的,例如
|---------| |-----------|
| seller | | product |
|---------| |-----------|
| |
| |
| |
/|\ /|\
|-----------------|
| stock |
|-----------------|
作爲一般性評論,我會說它真的可以幫助逐步完成設計過程。因此,一旦獲得了初始模型,將需要存儲的所有數據項分配給適當的實體,並有條不紊地確保設計處於第一範式,然後是第二範式,然後是第三範式。只有一旦你完成了這個任務,並且確信設計反映了需求,你應該考慮如何在數據庫中實現設計。無論如何,這就是我多年前學到的東西!
有一個客戶誰可以購買許多不同的產品和可以由許多不同的客戶購買的產品表客戶表。那麼,如何在數據庫設計中不允許多對多關係的情況下將其分解。 – user3127109 2014-12-06 07:07:48
@ user3127109:這是不同的問題,我編輯了我的答案。請閱讀編輯部分。 – 2014-12-06 09:10:38