Database-Design
主鍵:(a)為兩個不同的數據點設置在單個列上,或者(b)將其設置在兩列的組合上,每列都有一個單獨的數據點?
我正在為一家電子商務公司設計一個數據庫。每個產品都將由一個唯一的 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。
(注意:在上面的範例中,我沒有確定主鍵,因為這與本範例無關)