2011-02-02 7 views
0

내 제품 테이블에는 원자재, 하위 어셈블리, 어셈블리 등이 포함되어 있습니다. 이들은 모두 고유 한 productid가있는 "제품"이라고합니다. BOM은 하위 어셈블리를 만들기 위해 병합되는 재료로 구성되어 있기 때문에 BOM에 적합하지 않다고 생각합니다.다 대다 안의 한 테이블

즉, 하나의 원료 배치를 많은 하위 어셈블리에서 사용할 수 있습니다. 하위 어셈블리는 여러 원료 배치를 가질 수 있습니다. 이 새 하위 어셈블리는 여러 어셈블리에서 사용할 수 있으며 그 반대의 경우도 마찬가지입니다. 이것은 다 - 대 - 다 관계이지만, 무한 레벨에서 두 개의 테이블을 결합하면 작동하지 않습니다 (이 두 레벨 만 있으면 재료, 어셈블리 테이블과 같은).

많은 부모, 동일한 테이블 안에 많은 자식이 있으며, hirearchical 모델은 정상적인 hirearchy를 처리하는 것 같습니다.

id 테이블 및 id_Child 키를 모두 사용하여 products 테이블의 동일한 식별자에 "family"테이블을 만들 수 있습니까? 이 방법으로 여러 자녀의 경우 하나의 부모를, 여러 부모의 경우 하나의 자녀를 반복 할 수 있습니다.

다른 방법/더 좋은 방법이 있습니까?

답변

3

사실 나는 이것이 BOM이라고 생각합니다. 테이블 디자인이 그렇게 말하지는 않습니다. 제품이 "재료", "조립품"또는 "하위 조립품"인지 여부는 단순히 자녀가 있는지 여부에 따라 정의됩니다 (그러나 쿼리 성능이 문제가 될 경우 제품 표 자체에 해당 사실을 비정규화할 수 있음).

나는 두 개의 테이블이 구현했습니다 :이 정말 잘 작동

Product (product ID etc) 
Components (Parent product, child product ID, quantity) 

. SQL Server에서는 공통 테이블 식을 사용하여이를 쉽게 쿼리하여 특정 BOM의 "잎"을 설정할 수 있습니다.

구성 요소 테이블을 사용하는 데주의를 기울여야합니다. 이 예에서 제품 및 구성 요소 테이블은 함께 키트/어셈블리를 작성하는 패턴을 제공합니다. 나중에보고하기 위해 BOM의 복사본 (또는 원하는 경우 "인스턴스")을 효과적으로 가져 와서 다른 곳에 저장해야합니다. 아마도 제품 및 구성 요소에서 BOM을 설명하고, ProductItem 및 ComponentItem을 사용하면 조립이 완료된 실제 제품을 나타내는 실제 조립 된 어셈블리를 나타냅니다.

당신은 두 번째는 예를 최초의입니다 Product/Component는 점에서 object에 있습니다 Class/ComponentItemProductItem로로 말할 수있다.

+0

필자는 나중에 구성 요소 테이블을 사용하여 시간과 수량을 추적하여 나중에보고 할 수있었습니다. 저는 SQL Server 2005를 사용하고 있습니다. 답장을 보내 주셔서 감사합니다. 데이터베이스에 대한 Celko의 책조차도 명확한 답변을 제공하지 않았으며, 모든 예는 일반적인 트리 다이어그램입니다. – BeachBoy

+0

http://msdn.microsoft.com/en-us/library/ms186243(v=SQL.90).aspx – BeachBoy

+0

그래도 구성 요소 테이블을 사용하면 조심해야합니다. 이 예에서 제품 및 구성 요소 테이블은 함께 키트/어셈블리를 작성하는 패턴을 제공합니다. 나중에보고하기 위해 BOM의 복사본 (또는 원하는 경우 "인스턴스")을 효과적으로 가져 와서 다른 곳에 저장해야합니다. 아마'Product'와'Component'는 어셈블리를위한 BOM을 기술 할 것이고,'ProductItem'과'ComponentItem'은 일단 어셈블리가 실행되면 실제 아이템을 나타내는 실제 어셈블 된 어셈블리를 기술 할 것입니다. –