2010-12-31 4 views
1

예 1 :"국가", "지방"및 "도시"테이블을 디자인하는 방법은 무엇입니까?

xTable: xTableID, CountryName, PovinceName, CityName 
  • 또는

예 2 :

Country: CountryID, CountryName 
Province: ProvinceID, ProvinceName 
City: CityID, CityName 

질문 :

  1. 응용 프로그램 수준에서 국가,도 및 도시 목록을 채우고 예제 1 디자인을 사용 하시겠습니까? 또는 예 2에서와 같이 DB 수준에서 채워야합니까?

  2. 시는 선택한 지역 (있는 경우) 또는 국가 이름을 기반으로 표시됩니다. 선택한 국가에 따라 성 (있는 경우)이 표시됩니다. 지방은 한 국가에만 해당되며 도시는 한 지방/국가에만 해당됩니다. 많은 관계로 많은 아무도/그래서 난

참고 아래로 설계하지 : 모든 국가가 확실하게 도시를하지만 모든 국가가 지방의 이름을 갖게됩니다 없습니다.

Country: CountryID (PK), CountryName 
Province: CountryID (PK - FK), ProvinceName 
City: CountryID (PK - FK), CityName 

답변

2

도시와 국가, 주와 지방,시에서도까지 직접적인 관계가 필요합니다. 모든 주는 한 국가에 있으므로 Province 테이블에는 CountryID가 FK로 필요합니다. 똑같이 모든 도시는 한 나라에 있고 거기에서도 마찬가지입니다. 모든 국가에 지방이라고 불릴 수있는 지역이있는 것은 아니므로시에서 국가를 탐색하는 데 사용할 수 없습니다. ProvinceID는 City 테이블에 있어야하지만 null 값을 허용해야합니다.

또는 지방이없는 국가의 경우 가상 성 (예 : 성 이름 = 아니오 성)을 설정하고 도시와 국가를 연결하는 데 사용할 수 있습니다. 그것은 지방이있는 국가에 있었지만 지방에 있지 않은 도시가있는 경우에도 효과가 있습니다 (그러한 지역이 존재하면 지방은 도시 일 수 있습니다).

+0

나는 너의 것을 만나는 또 다른 제안을했다. ID, CountryID, ProvinceID, CityID 열이있는 새 테이블을 만듭니다. 나는 이것이 많은 관계를 충족시키는 것을 알고 있지만 다루기가 더 쉬워 보인다. 명시된 디자인에 대한 의견이 있으십니까? – user311509

+0

나는 그것을 많이 좋아한다고 말할 수 없다. 귀하가 귀하의 사업체간에 엄격한 관계를 유지하는 것이 얼마나 중요한지에 달려 있습니다.테이블 디자인은 City가 여러 국가와 관련되는 것을 제한하지 않으며, 프로그래밍 방식으로 수행해야합니다. 그러면 오류가 발생할 수 있습니다. 엄격한 관계를 유지하기 위해 DB를 사용하려면이 방법이 아닙니다. 다른 한편, 만약 당신이 방금 일부 코드를 실행하고 다음과 아마 잘 작동합니다 더러운 수정에 관심이 있습니다 :-) 당신은 정말 기본 키가 CityID가 필요합니다. 그래서 위의 두 가지 해결책 중 하나를 선택했습니다. –

+1

사이드 노트 : 국가 및 지방의 선택에 따라 필터 드롭 다운 값과 같은 데이터로 무엇인가를하고 싶다고 가정합니다. 분기 코드를 피하기 위해 가상 지방 솔루션 (지방이없는 각 국가에 대한 상상의 지방이 만들어 짐)이 가장 간단합니다. 한 국가에 상상의 지방이 있는지 확인하고이 경우 지방 드롭 다운을 사용하지 않도록 설정할 수 있습니다. 한 국가에 하나의 지방 (가상 또는 안)이있는 경우 도시 드롭 다운을 미리로드 할 수도 있습니다. –

0

및 CityId는 주 및시를 나타냅니다. 한 주에는 많은 도시가있을 수 있으며 한 국가에는 여러 주를 가질 수 있습니다. countryId를 도시에 두어야 할 필요는 없지만 ProvinceI는 국가가 아닌 국가에 의해 실행되기 때문에 충분할 것입니다.

+0

일부 국가는 지방이라고 불리는 구역을 가지고 있지는 않습니다 (바티칸시를 생각해보십시오). 똑같이 다른 카운티에는 여러 단계의 하위 구분이 있습니다 (예 : 영국 : 구성 국가는 카운티로 나뉩니다). – Richard

관련 문제