2009-10-14 3 views
0

제 질문은 다른 유형의 제품에 대한 트랜잭션을 모델링하는 방법입니다.DB 스키마 질문, 제품 유형

은 그래서 트랜잭션 테이블이 있습니다 :

TransactionId(pk) 
Amount 
Method 
AuthorisedBy(fk) 

그리고 제품의 다른 종류의 서로 다른 테이블이 있습니다. 책 테이블 :

BookId(pk) 
Name 
Description 
Price 

그리고 펜 테이블 :

PenId(pk) 
Color 
Description 
Price 

그리고 연필 선명 서비스를위한 테이블 :

SharpenId(pk) 
Description 
Price 

이제 내 질문이와 거래를 연결한다 다른 항목의 특정 ID입니다. 한 가지 방법은 트랜잭션 테이블에 가지고 있었다 : 제품 유형 테이블, 예를 들어 책과 그 경우에 bookID로서 참조 할 제품 ID의 제목을 참조 할

TransactionId(pk) 
Amount 
Method 
AuthorisedBy 
ProductType 
ProductTypeId(fk) 

.

또는 다른 방법은 다른 테이블의 각기 다른 ID를 참조 '제품'의 연결 테이블을 가지고하는 것입니다, 그래서 트랜잭션 테이블과 같을 것이다 :

TransactionId(pk) 
Amount 
Method 
AuthorisedBy 
ProductID(fk) 

및 제품 테이블 것 다음과 같이 보입니다.

ProductId(pk) 
PoductType 
ProductTypeId(fk) 

하지만이 테이블은 거래 테이블과 완전히 동일합니다. 그래서 내 질문은 효율적으로 다른 제품 유형 테이블을 트랜잭션에 연결하는 것인가? 참고 학교 연필 서비스를 모델링하는 것이 아니라 단지 예일뿐입니다. P

답변

2

우선 DB 모델을 좋아하지 않습니다. (테이블) 제품 ID - PK, 이름, 설명, 색상, 가격, ProductTypeID - FK

유형을 설명하는 추가 표가 필요합니다. (테이블) ProductTypes : 제품, 그것은 카테고리하자 말의 ProductTypeID - PK, ProductTypeName

을 그리고 트랜잭션을 등록하는 당신은 단지 하나의 테이블이 필요합니다 : (테이블) 거래 : transactionId는, 제품 일련 - FK, 금액, 방법을 , AuthorizedBy

이 스키마가 문제를 해결하는 데 도움이 될 것이라고 생각합니다. 해피 코딩.

+0

하지만 내 제품 유형이 서로 매우 다릅니다. 예를 들어 내 '연필 날카롭게하기'테이블에서 서비스이기 때문에이 테이블에 여러 항목이 있으며 제품에 데이터가 저장되는 방법은 무엇입니까? 테이블, 그들이 '색'또는 가격, 설명 이외의 다른 공통 열을 갖지 않으므로. – theraven

+0

+1 특정 속성을 추가하기 위해 1 : 1 관계로 제품 테이블을 확장 할 수 있습니다. 이 답변에 언급 된 ProductTypes 또는 귀하의 의견을위한 ProductColor.제품 테이블 자체에는 인보이스 생성에 필요한 모든 필드가 포함될 수 있으며 인보이스 발행 코드는 다양한 제품 유형을 처리하는 데 필요한 복잡성없이 수행 할 수 있습니다. – Andomar

+0

나는이 질문에 대답 할 것이기 때문에 내가 대답 한 질문에 대답 할 것이지만, 불행히도 내 질문을 개혁하고 나중에 질문 할 필요가있다. – theraven