有一個大表products
。我需要將布爾標誌disabled
添加到我的產品型號中。通常我只是在現有的表中添加一個新的字段。但是這個屬性將很少使用,並且考慮到表中的記錄數量,這個新字段將會對性能和磁盤空間產生不必要的影響。規範化一對一布爾關係
所以我決定做一種1NF規範化的一對一關係(即將此字段移動到另一個具有外鍵引用的表products
;我不知道它是否真的是1NF - 這是我的問題)。但我實際上並不需要true
和false
值,因爲這意味着關係的表大小將等於products
的大小。所以在關係表的值域中是沒有必要的。所以我的模式是:
CREATE TABLE products (
id INT PRIMARY KEY,
name VARCHAR
);
CREATE TABLE disabled_products (
product_id INT NOT NULL,
CONSTRAINT fk_product FOREIGN KEY (product_id) REFERENCES products (id) ON DELETE CASCADE
);
(SQLFiddle要搗鼓)。
因此,我收到了我想要的 - 只有在設置了標誌的情況下才會存儲該值。在幕後,國旗不是由表格欄表示的,而是由於在給定產品的disabled_products
中出現記錄。
只想知道我是否做得對。
這樣的設計有什麼可能的缺點?
它是否適合關係模型(通過它我的意思是這種規範化的一般方式和一個表,特別是單一的外鍵列)?如果是的話,你如何在RDB科學上稱這個解決方案?
這不是反規範化。 –
@ypercube,編輯我的問題的Jon Hanna認爲是。我認爲這是正常化。 – Hnatt
是的,我沒有注意到編輯。它現在回滾到原來的狀態。 –