Database-Design

主鍵:(a)為兩個不同的數據點設置在單個列上,或者(b)將其設置在兩列的組合上,每列都有一個單獨的數據點?

  • November 1, 2018

我正在為一家電子商務公司設計一個數據庫。每個產品都將由一個唯一的 ID (SKU) 標識。我們希望將 SKU 格式化為LLLL000. LLLL是父產品,例如 Iphone X。 000是變體產品,例如color: Gold, storage: 256, status: Open Box

按照該範例,Iphone X 的 SKU,顏色:Gold,儲存:256,狀態:Open Box,將類似於:LKGH177 A different Iphone X would have: LKGH178

我的問題是:

  • 我是否應該將整個 SKU 視為包含兩個不同數據點的單列主鍵,從而違反 1NF?
  • 我是否應該考慮將 SKU 拆分為兩列並設置兩列複合主鍵?

數據庫不是我的主要領域,所以我希望它很清楚。

我建議兩者都做。為 SKU 創建一個屬性,並為產品和子類型創建兩個單獨的屬性。SKU 將是一個鍵,產品子類型將是一個複合鍵。例子:

CREATE TABLE product
(sku CHAR(7) NOT NULL,
skusub1 CHAR(4) NOT NULL,
skusub2 CHAR(3) NOT NULL,
... 
UNIQUE (sku),
UNIQUE (skusub1,skusub2),
CHECK (skusub||skusub2=sku));

您可以為 sub1 和 sub2 屬性賦予更有意義的名稱。

這實際上並不違反 1NF。SKU 本身就是一個重要的值,只要您在數據庫中也有單獨的組件,那麼就沒有理由將 SKU 分成兩部分。根據我的經驗,SKU 幾乎總是被視為單個值,因為儘管它可能包含編碼元素,但編碼方案可能會發生變化。您可能在某些時候擁有不遵循相同方案的 SKU。

(注意:在上面的範例中,我沒有確定主鍵,因為這與本範例無關)

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