2016-09-09 3 views
0

있는 테이블을 정규화 I 현재 항목단단히 결합 된 데이터

Item (material1, material2, material3) 

다른 재료가 최근에 추가 된를 만드는 데 사용되는 물질을 저장하는 테이블을 가지고있다. 그러나이 테이블을 표준화하여 나중에 새로운 재질을 추가 할 때 데이터베이스에 새 열을 추가 할 필요가 없도록하려고합니다. 다음 접합 테이블에 재료를 추출했습니다.

ItemJuncMaterial (id, itemId, materialid) 

그러나 재료의 순서가 중요합니다. 따라서이 접합 테이블 날이 2,3,1을 사용하거나 심지어 두 물질 1, 2를 사용할 수있는 항목을 반환 할 수있는 항목을

select itemid from ItemJunMaterial where materialid in (1,2,3) 

을 얻기 위해 재료에 따라이 쿼리를 실행 할 수 없습니다. 이 테이블을 정상화하여보다 동적으로 만들려면이 테이블을 분할하는 더 좋은 방법이 있습니까?

답변

0

"BOM"패턴 (here 또는 here 참조)을 고려해야합니다. BOM의 교차에는 각 구성 요소의 양과 같이 구성에 대한 추가 정보가 포함될 수 있습니다. 해당 교차로에서 구성 요소의 순서 나 우선 순위를 쉽게 쉽게 포함 할 수 있습니다.

+0

내가 관심을 갖는 부분은'ItemJunMaterial에서 matieralID = 1, sequence = 1, materialid = 2 and sequence = 2 등. '이라고 써야 할 항목을 찾을 때입니다. 그러나 이것이 그 방법은 내가해야 할 일이다. – Brandon

+0

@ bme2010 예, 개별 레코드를 선택할 때 기본 키를 사용해야합니다. 만약 그 기본 키가 합성물이라면'where' 절에'and'가 필요합니다. 그 일을 많이 하시겠습니까? 전체 목록을 얼마나 자주 선택 하시겠습니까? 0NF 구조체에서,'Item (material1, material2, material3)'은 하나의 선택으로 전체리스트를 얻습니다. 반 정규화 된 구조에서는'(1, 2, 3)에서 materialid를 사용하여 전체 목록을 얻습니다. –