데이터베이스 디자인을 올바르게 얻으려고합니다. 그것은 맥주, 술, 와인 등으로 구성된 알코올 음료의 큰 집합입니다. 다음과 같이 나는 하나의 테이블에 모두 유지할 수 :종속성을 줄이기 위해 데이터베이스 정규화
id category brand type price quantity description
1 Beer Heineken bottle $2.00 100 some description...
2 Beer Calsburg bottle $3.00 200 some description
3 Beer Heineken can $1.00 300 some description....
4 Liquor JWalker bottle $30.00 100 some descri...
이이 발생할 카테고리 및 브랜드에 대한 반복을 고려 나쁜 디자인 같다.
분류 표
id name(pk)
1 Beer
2 Liquor
브랜드 표
id name(pk) category_name(FK)
1 Heineken Beer
2 Carlsburg Beer
3 Lindemans Wine
4 JWalker Liquor
제품 표
id(PK) type price quantity description category_name(FK) brand_name(FK)
1 Bottle $2.00 100 some description Beer Heineken
,536을 다음과 같이 따라서 나는 3 개 테이블로 분할
생각하면 정규화 된 방식이 좋지만 첫 번째 표와의 차이는 거의 없습니다. 그리고 나는 병, 깡통 등등에 반복을 얻을 수 있기 때문에 너무 repeatnig 유형으로 끝난다. 내가 4 번째 테이블을 얻어야 하나?
가능한 한 합리적인 수준으로 유지하십시오. 이 작업을 수행하는 더 좋은 방법이 있습니까?
create table product (
product_id int not null identity,
brand_id int not null,
category_id int not null,
primary key(product_id),
foreign key brand_id references brand(brand_id),
foreign key category_id references category(category_id)
);
create table brand (
brand_id int not null identity,
name varchar(80),
primary key(brand_id)
);
create table category (
category_id int int not null identity,
name varchar(80),
primary key(category_id)
);
당신은 다시 기록을 얻기 위해 가입 않습니다 :
외래 키 값은 값이 아니라 상위 테이블의 행 ID 여야합니다. – duffymo
OP가 지적한 것처럼 브랜드 나 카테고리와 관련된 추가 데이터가 없기 때문에 테이블을 분리하는 데별로 이점이 없습니다. 그렇지만 항상 고유 한 경우 PK로 이름을 사용하는 것이 좋습니다. – mhatch
Say Heineken이 다른 회사에 의해 매수/매매되고 /되거나 다른 브랜드로 변경되었습니다. 모든 제품을 업데이트하거나 브랜드 테이블에서 하나의 레코드 만 업데이트하고 싶습니까? 단일 테이블은 유혹을 불러 일으킬 수 있지만 장기간 유연성을 떨어 뜨립니다 (축소하지는 않지만 추가 작업을 추가 할 수도 있음). 이 시스템의 변화가 어떻게 진행될 계획입니까? 그렇다면 가능한 한 3/4에 가깝게 얻으십시오. *** 만약 *** 이것이 정말로 될 것이며, 당신이 변화를 예상하지 않는다면, 단일 테이블은 유지 보수가 더 어렵다는 "빠른"것입니다. – xQbert