2012-04-22 2 views
0

두 개 이상의 크기가있는 제품이 있습니다. 다음 디자인이 좋습니까?많은 관계 설계가 있습니다

  • 제품 (#product_id, 제품 _)

  • 크기 (#size_id, #product_id, 크기) '#'으로

나는 외국 또는 기본 중 하나를 키를 나타낸다.

답변

1

기본 키이고 외래 키 제약 조건이고 크기 테이블에서 고유하게 제한되는 열 조합을 명확하게 지정하지 않았습니다.

  • Product_id는 분명히 제품을 참조하는 외래 키입니다. 아무런 문제가 없습니다.

  • Size_id는 자동 증가 식별자이며 크기의 '기본 키'로 사용됩니다. 그것은 나에게 잔인한 것처럼 보이지만 실제로 잘못이 아닙니다.

  • PRODUCT_ID 및 크기의 문서화되지 않은 조합은이 같은 두 개의 행으로 끝낼하지 않도록하는 데에 고유 제한 조건이 필요합니다 : 같은 일을 두 번 —을 말한다

    Size_ID Product_ID Size 
    1234  23456  12 
    1235  23456  12 
    

ID 23456 제품은 크기가 12입니다. 동일한 것을 두 번 말하면 반복적이며 잘못된 대답으로 이어질 수 있습니다. 제품 번호 23456이 얼마나 많은가? — COUNT (DISTINCT Size) 대신에 단지 COUNT (*)가 아니라 타이핑 때문에가 아니라 DBMS가 더 많은 일을하고 누군가가 언젠가는 잊어 버리고 틀린 질문을 내놓을 것이기 때문에 부검이 극적으로 잘못 된 이유에 대한 부검까지는 문제가되지 않을 것입니다.

Product_ID와 Size를 기본 키로 사용하여 Size_ID없이 완벽하게 처리 할 수 ​​있습니다. 그렇지 않으면 Product_ID 및 Size에 고유 한 제한 조건이 필요합니다.

+0

Product, ProductHasSize 및 Size 세 개의 테이블이 필요합니까? ProductHasSize는 product_id 및 size_id가 PK로되어 있습니다. –

+0

ProductHasSize 테이블의 '크기'값을 유효한 크기의 작은 세트 중 하나로 제한해야하는지 여부에 따라 다릅니다. 그렇게한다면 3 표 접근법이 합리적입니다. Size 테이블은 Size_ID 및 Description (또는 그 근처) 열을가집니다. ProductHasSize 테이블에는 Size_ID, Table Size를 참조하는 외래 키 및 Product를 참조하는 외래 키인 Product_ID라는 두 개의 열만 있습니다. ProductHasSize 테이블의 기본 키는 Size_ID와 Product_ID의 조합입니다 (또는 반대로). –