Database-Design

建模賣家和產品

  • August 20, 2018

我正在嘗試對產品和賣家資訊進行建模。賣方可以是個人,也可以是公司,也可以是擁有分支機構的公司(產品由特定分支機構銷售)。每個產品只有一個關聯賣家(可以是個人、沒有分支機構的公司或特定公司的分支機構)。

我覺得我應該有一張個人表和另一張公司表(有父子關係,也許對自己,所以它可以代表公司-分支機構關係)。products 表可以有一個 individual_id(個人表的 PK)和一個 company_id(公司表的 PK)。products 表將只填充 individual_id 或 company_id 列。

在此處輸入圖像描述

不過,上面感覺很亂。

我覺得我可以只使用兩個表:產品和賣家。賣家表可以代表個人、公司或公司分支機構(這意味著賣家表需要這種父子關係,即使它不適用於個人——就像它不適用於某些公司一樣)。不過,個人和公司有不同的列——但我想把不適用的列留空)。

在此處輸入圖像描述

上面的模型好嗎?有什麼可能的缺點嗎?

此外,在設計數據庫時——將相關數據放在一個表中是否是個好主意?例如,公司需要儲存地址資訊。我是否將其放在 company_addresses 表中(表示 JOIN)。或者我只是將它們表示為公司/賣家表中的列(假設每個公司只有一個地址 - 但仍然可以將多個地址放在一行中,如 postal_address_line_1、physical_address_line_1 等)。

我的建議是這樣的:

您將為品牌、公司和個人提供不同的表格,因為它們具有不同的屬性……它們唯一的共同點是它們都是**SELLERS**. 請注意,我已經包括了公司和品牌之間的關係

由於產品可以在沒有賣家的情況下存在(您可以在創建產品後幾天分配賣家),我不會在此表中放置任何外鍵;它還將使**products**表格保持清潔,僅具有產品屬性。

現在,讓我們**Sellers**上桌(這不是實體的規範化……這只是他們在這個行業中扮演的角色):

  • 因為該產品只有一個賣家;我包括與產品表的一對一關係。這意味著 product_id 是外鍵,也是主鍵。
  • 所有其他外鍵都不是強制性的(它們都可以為空)
  • seller_check, 是具有以下公式的計算欄位:
seller_check    SMALLINT AS(
CASE WHEN company_id IS NULL THEN 0 ELSE 1 END
+ CASE WHEN brand_id IS NULL THEN 0 ELSE 1 END
+ CASE WHEN individual_id IS NULL THEN 0 ELSE 1 END) NOT NULL
  • 最後,您需要包含一個表檢查約束,以確保只有一個外鍵不是 NULL:

ALTER TABLE sellers ADD CONSTRAINT sellers_ck_1 CHECK ( seller_check <= 1 );

祝你好運!

在此處輸入圖像描述

引用自:https://dba.stackexchange.com/questions/215347