큰 테이블 products
가 있습니다. 내 제품 모델에 부울 플래그 disabled
을 추가해야합니다. 일반적으로 기존 테이블에 새 필드를 추가합니다. 그러나이 속성은 거의 사용되지 않고 테이블의 레코드 수를 감안할 때이 새로운 필드는 성능 및 디스크 공간에서 불필요한 히트를 만듭니다.일대일 부울 관계 정규화
그래서 일대일 관계에 대해 일종의 1NF 정규화를 수행하기로했습니다 (즉이 필드를 외래 키가있는 다른 테이블로 이동하면 products
), 이것이 실제로 1NF인지는 알 수 없습니다. 내 질문). 그러나 각 제품의 disabled
속성에 실제로 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 to fiddle around)입니다.
따라서 내가 원하는 것을 정확하게 수신합니다. 값은 플래그가 설정된 드문 경우에만 저장됩니다. 뒤에서 플래그는 테이블 열이 아닌 주어진 제품에 대한 레코드가 매우 존재하여 disabled_products
으로 표시됩니다.
내가 올바르게하고 있는지 알고 싶습니다.
그러한 디자인의 단점은 무엇입니까?
관계형 모델에 적합합니까 (에 의해이 일반화 된 방식과 일반적으로 단일 외래 키 열로 구성된 테이블을 의미 함)? 그렇다면 RDB 과학의 관점에서이 솔루션을 어떻게 부릅니까?
이것은 비정규 화가 아닙니다. –
@ypercube, 내 질문을 편집 한 Jon Hanna는 생각합니다. 정상화라고 생각했습니다. – Hnatt
예, 편집 내용을 알지 못했습니다. 이제 원본에서 롤백되었습니다. –