2012-09-26 3 views
0

1NF/2NF/3NF에 대해 다음 사항이 유효한지 궁금합니다. 하나의 테이블에 여러 개의 '위치 ID'를 저장해야합니다 (여러 개의 나열된 위치가 필요한 링크 된 테이블의 경우). about.com (here)에 읽는 기사 후에는, 내가 중복 열을 사용할 수 없습니다 IE,여러 개의 중복 열 - 유효한 정규화?

LinkedLocationID (referenced from another table) 
LocationID1 
LocationID2 
LocationID3 

나타납니다 그리고 난 그래서 비 원자 필드, IE,

LinkedLocationID 
LocationIDs 

을 사용할 수 없습니다, 1NF를 위반하지 않고 세 개의 중복 열을 포함하는 것이 어떻게 가능합니까? Location에 대해 여러 값을 저장하고 데이터베이스를 3NF와 호환되도록 설정해야합니다. 감사합니다. .

+0

감사합니다. 네 개의 대답 모두 똑같은 문제를 말합니다. – Hendo

답변

0

당신은 당신이 사이에 interesection 테이블을 사용하게된다 엔티티 :

Item 
===== 
ItemID 
... 


ItemLocation 
============ 
ItemID 
LocationID 
... 



Location 
======== 
LocationID 
... 
0

당신은

그래서 첫 번째 예제를 사용하여 각 조합에 대해 하나의 행으로 LinkedLocationLocations에 대해 별도의 테이블을 가지고 있어야

LinkedLocationID | LocationIDs 
1    | A,B 
2    | B,C 

LinkedLocationID | LocationID 
1    | A 
1    | B 
2    | B 
2    | C 
0

귀하의 질문은 당신이에 연결하는 것없는, 그러나 고전적인 솔루션은

Thingies 
ThingyID 
... 

Locations 
LocationID 
... 

ThingyLocations 
ThingyID FK to Thingies 
LocationID to Locations 
0

는 "유효"그것을 생각하는 올바른 방법이라고는 할 수없는 것입니다. 문제가 많으며 정상화하지 않는 것이 좋습니다. 데이터가 내 의견으로는 어떻게 사용되는지 더 중요합니다.

정규화가 유일한 문제인 경우 세 개의 위치 ID를 단일 테이블에 저장하면 안됩니다. 위치 ID를 LinkedLocationID에 연결하는 테이블이 필요합니다. 그 표는 다음과 같을 것입니다 :

LocationLinkedLocationId - LinkedLocationID - LocationID 
1       1     1 
2       1     2 
3       2     1 
4       3     1