2014-04-14 7 views
0

나는 상대적으로 복잡한 데이터 구조를 가지고 프로젝트를 진행하고, 우리는 다음과 같은 상황으로 난처한 상황에 빠진 조금있다가 :SQL - 복잡 링크 테이블, 간단한 솔루션

DB를은 유약 단위를 대표하는 다양한 테이블이 * 구성 요소 (유리판, 코팅, 블라인드) 및 이들 각 구성 요소에는 스펙트럼이 있습니다.

tbl_glasspane 1 -- many tbl_glasspane_spectra 
-------------    ------------- 
+ Id       + GlassPane_Id 
    GlassPaneName    + Wavelength 
    TypeId etc.     Value 

을 GlassPaneId 기본 키 인 경우 : 다음과 같이 이제 우리는 구성 요소 테이블 당 하나 개의 스펙트럼 테이블을 가질 수있다 - (* 유약 단위는 더블/트리플 유리 유리 단위를 생각한다), 간단한 FK 관계가있을 것입니다 GlassPane의 GlassPaneId/Wavelength는 tbl_spectra의 복합 기본 키입니다.

잘 작동하지만 각 구성 요소 테이블마다 하나의 tbl_xxx_spectra가 필요합니다.

이 해결책은 각각의 구성 요소 테이블이 참조 할 수있는 하나의 Spectra 테이블을 가지지 만 그 안에 문제가 있습니다. 하나의 스펙트럼 테이블을 참조하기 위해 임의의 수의 구성 요소 테이블을 얻는 방법은 무엇입니까?

내 초기 솔루션이었다

tbl_spectra   tbl_spectraIndex tbl_glasspane  tbl_coating 
---------------  ---------------  -------------  ------------- 
+ SpectraIndex_Id + Id    + Id    + Id 
+ Wavelength        SpectraIndex_Id  SpectraIndex_Id 
    Value 

그래서 설명 ...

tbl_spectraIndex 하나 개의 ID 열을 포함하는 테이블입니다. tbl_spectra는 tbl_spectraIndex의 Id와 SpectraIndex_Id 사이의 FK 관계를 가지고 있으며 이것은 tbl_spectra의 복합 PK의 한 부분입니다. tbl_glasspane과 tbl_coating은 tbl_spectraIndex와 FK 관계가 있습니다.

이 방법이 현명한 해결책입니까?

답변

0

이러한 경우에는 정규화되지 않은 스키마를 사용하는 것이 좋습니다. 두 개의 필드가있는 하나의 단일 스펙트럼 테이블을 사용할 수 있습니다. 하나는 스펙트럼이 속한 종류의 객체 (테이블)를 저장하는 int입니다. 다른 하나는 테이블 ID에 링크되는 int입니다. 이 경우 스펙트럼 테이블은 동일한 필드가있는 여러 테이블에 연결됩니다. 예를 들어 내 주소 표를 사용하여이 작업을 수행하는 경향이 있습니다. 내 데이터베이스에는 하나 이상의 주소 개체가 연관되어 있어야하는 많은 개체가 있고 모든 주소에는 동일한 필드가 있습니다. 그래서 저는 일찍 언급하는 것처럼 두 필드가있는 하나의 주소 테이블을 만듭니다. 하나는 표현할 개체의 종류를 나타내는 것이고 다른 하나는 실제 개체에 대한 링크가있는 테이블입니다.

또한 모든 유약 테이블을 하나의 큰 테이블에 넣는 것을 고려해보십시오. 희망이 당신을 돕는다.