2016-09-06 3 views
1

모델 번호가 다른 여러 그룹의 제품을 포함하는 테이블 product(id, name)가 있습니다. 즉 {모터 10, 모터 20, 모터 30, 파이프 10, 파이프 20, 파이프 30, 렌치 12, 렌치 20 등}. "제품 범주"에 "제품"과 식별 관계가 있어야합니까?

나는 {분류 모터, 파이프, 렌치,}처럼, 단지 범주를 포함 product category라는 새 테이블의 실제적인 목적을 위해

enter image description here

질문

만들기를 선택 ER 다이어그램 모델링과 같은 이론적 인 목적을위한 것이 아니라면, 식별 또는 비 식별 관계를 사용해야합니까?

내 사용 사례 내 경우에는 제품이 범주없이 존재할 수 없도록 정의 할 수 있습니다. 그러나 제품이 아직 분류되지 않은 경우 카테고리에 uncategorized 값이 전달됩니다. 카테고리에는 아직 제품이 할당되지 않은 항목이있을 수 있습니다.

카테고리는 실제로 사용할 필요가없는 구성 개념이지만 현재 가지고있는 제품 세트를 분류하는 데 도움이 될 것입니다. 나는 그것이 개념으로 구성되어 있기 때문에, 그리고 그것을 어떻게 사용하고 싶은지 모르겠다 고 생각한다. 왜 나는이 문제로 고심하고있다. 일명 .. 나는 에 테이블을 가지고있는을 가지고 있지만, 분명히 다양한 제품 그룹화에 도움이 될 것입니다.

식별 관계를 만들려면 일부 코드를 수정하고 다시 작성해야하며, 많은 코드를 작성하기 전에 식별 관계를 확인하고 싶습니다.

...이 말은, 내가 이것을 식별 관계로 삼지 않는 경우가있을 것입니까?

+0

도움이된다면 추가하십시오. 그것은 간단합니다. 조기에 결정하여 자신을 위해 많은 추가 작업을하지 마십시오. 그것이 나라면, 나는 그것을 추가 할 것입니다. – Missy

+0

'product_category_id'를 PK의 일부로 만들면 다른 idexes의 크기를 늘릴 것입니다. 왜냐하면 그들은 이유도없이 그것을 포함하기 때문입니다. –

답변

1

당신은 선언 할 수 있습니다 product_category 필수로 - 즉, NOT NULL 그것을 식별 관계의 일부로 만드는 수리공 없이도.

식별 관계는 특성이 테이블의 기본 키의 일부임을 의미합니다. 나는 네 사건에 해당한다고 생각하지 않는다. 테이블은 테이블의 기본 키에 포함시키지 않고 NOT NULL 속성을 가질 수 있습니다.귀하의 코멘트를 다시


:

식별 관계를 정의하는 또 다른 방법은 자식 테이블의 행을 고유하게 부모를 참조하지 않고 식별 할 수없는 것입니다.

그러나 귀하의 경우 아직 카테고리에 속해 있지 않거나 하나 이상의 카테고리에 속하지 않아도 쉽게 식별 할 수있는 제품을 쉽게 찾을 수 있습니다 (다 대다 카테고리가있는 경우) 많은 관계).


어쩌면 존재가 실제로 적절한 기준이 아닙니다. 하지만 은 카테고리를 언급하지 않고 다른 속성 (기본 키)을 사용하는 제품을으로 식별 할 수 있습니까? 또는 제품의 고유 한 신원을 변경하지 않고 제품 범주가 변경 될 수 있습니까?

예를 들어 미국에 거주하는 미국 시민권자가 있습니다. 국가는 의무적 일 수 있습니다 (논쟁을 위해서, 해외에 살고있는 시민들이나 미국 영토 내에서 고려하지 않음). 그 시민의 현재 상태에 대한 확인 가능한 관계가 있습니까? 아니; 그들은 국가에서 국가로 이동할 수 있고 그들은 여전히 ​​같은 사람입니다. 상태가 필수 일지라도 상태는 단순히 속성 일뿐입니다.

반면 쇼핑 카트의 광고 항목과 같은 다른 예는 상위 쇼핑 카트와 식별 관계가 있습니다. 해당 장바구니가 없으면 광고 항목이 존재하지 않습니다.

회색이 더 많은 예제는 전화 번호입니다. 나는 현재 자신의 전화 번호를 소유하고 있으며 소유자가없는 전화 번호는 갖고 있지 않습니다. 하지만 전화 번호를 포기하면 다른 회사에 전화 회사를 재 할당 할 수 있습니다. 나는 그것이 관계를 확인하는지 여부를 확신하지 못합니다.

+0

감사합니다. 나는 호기심이있다 - 어떻게 적용되지 않는다고 분별 하는가? 즉, (여전히 동일한 시나리오를 고려하면서) 적용될 경우를 주장 할 것입니까? – Dennis

+0

빌, 고맙습니다. 따라서 '제품'이 명시 적으로 분류되지는 않았더라도 자체적으로 서있을 수 있다는 근거가 있습니다. 나는 "제품이 개념적으로 범주없이 존재할 수 없다"와 같은 인공적인 비즈니스 규칙을 만들 수 있는지를 확인하려고 시도했다. 그런 다음 그것을 강제로 확인하여 관계를 식별하는 것으로 가정한다. 즉, 식별 할 수없는 관계를 식별하는 것에 대한 결정이 객관성이 아닌 의미 또는 비즈니스 규칙의 산물인지 궁금합니다. 나는 100 % 생각을 가지고 있다고 말할 수는 없지만, 더 가까이 다가 가게 해줘서 고마워. – Dennis

1

나는

  1. 은 비 식별 관계로 product_category 테이블을 남겨 것이다.
  2. product_category 행의 기본값은 category_name = Uncategorized이고 id = 1입니다. product_category가 자동으로 할당되지 않은 모든 새 product 행이 Uncategorized 기본값 있도록
  3. product 테이블의 열 product_category_id에 대한 1의 기본값이.