2012-06-23 2 views
0

가방이 접속되어있다 장소".
하나 또는 네 개의 테이블? <br/> 하나 이상의 "영역"및/또는 <br/> 하나 이상의 "주"및/또는 <br/> 하나 이상의 "도시"및/또는 <br/> 하나 이상의 "(DB 구조)

id | thingID | regionId | countyId | cityId | placeId 

또는

4 tables :


내 질문은 내가 관계를 설정하는 방법입니까?

id | thingId | regionId 

id | thingId | countyId 

id | thingId | cityId 

id | thingId | placeId 

또는 더 좋은 해결책이 있습니까?

+0

각 지역은 지역, 카운티, 도시이고, 일을 여러 위치가 있습니까, 배치? 또는 항목과 논리적으로 다른 항목간에 연결된 "링크"가 있습니까? – willem

+0

테이블에 여분의 열을 추가/제거 할 수 있기 때문에 제 2의 솔루션을 선택할 수 있습니다. 예를 들어 도시 테이블 \에 포스트 코드/전화 번호를 국가 테이블 등에 추가 할 수 있습니다. – Gntem

+0

@willem 것들은 여러 위치를 가질 수 있습니다. 그리고 저는 그 지역을 활성화하지 않고 "도시"를 선택할 수 있습니다. 따라서 내가 지역을 검색하면 그 도시가 그 지역과 연결되어 있다는 사실을 근거로 그 일이 나올 것입니다. 그러나 그 일은 단지 그 카운티 안에있는 도시에만 속합니다. (도움이 될지 확실하지 않음) – Alisso

답변

1

나는 이것을 과소 평가했을지 모르지만 "지역", "군", "도시"및 "장소"사이에 관계가 있다고 생각합니다. "장소"에 속하는 항목도 도시에 속해야합니다. 카운티 및 지역.

당신이 제공 한 디자인 모두에서 이것을 해결할 수 있습니다. 그러나 상당한 양의 추가 로직이 필요합니다. 첫 번째 솔루션에서는 레코드를 삽입 할 때마다 "왼쪽에서 오른쪽으로"위치를 채 웁니다. "장소"만있는 레코드는 유효하지 않습니다.

두 번째 해결 방법에서는 관련된 모든 행을 채워야합니다. Chelsea의 항목에는 London, Middlesex 및 South East England에 대한 레코드가 있어야합니다. 또 다른 방법이있다

...

Table: location 
ID  Name     Parent 
------------------------ 
1  South East England null 
2  Middlesex    1 
3  London    2 
4  Chelsea    3 
5  Kent     1 
6  Canterbury   5 


Table: item 
Id  name 
----------------- 
1  Posh Boy 
2  Cricket ground 
3  Rain 

Table: item_location 
ItemID LocationID 
-------------------- 
1  4 //Posh boy in Chelsea 
2  2 // Cricket ground in Middlesex 
3  1 // Rain in the South East of England. 
+0

위치 유형간에 일종의 계층을 포함하는 구조가있을 수는 있지만 그다지 직접적인 일대일 관계 일 수는 없다고 생각하지 않습니다. 그들 사이의 많은. 예를 들어 도시는 여러 카운티를 교차 할 수 있습니다. –

1

두 번째 옵션이 분명 좋습니다. 이 범주 각각에 대해 다 대다 관계이므로 두 번째 옵션에서 설명합니다.

첫 번째 옵션은 매우 이상한 데이터를 생성합니다. 한 번에 모든 다른 유형과 관련된 ThingId가 있다면, 모든 열이 채워져있는 한 행을 가지게됩니다. 그러면 ThingId를 추가 도시에 묶어야 할 필요가있는 다른 행이있을 것입니다 도시는 채워졌고 다른 열은 null로 남았습니다.

많은 null 값을 초래하는 테이블 디자인은 일반적으로 모델에 결함이 있음을 나타냅니다 (항상 그런 것은 아닙니다).