2010-12-14 4 views
0

가정하자 나는 다음과 같습니다.저장 지역/도시 데이터

표 region_city

내 사용자 테이블에서
id name   parent_id 
============================== 
1  North   null 
2  South   null 
3  Manchester  1 
4  London   2 

나는 사용자가에있는시의 ID를 저장

이제 검색 양식에 최상위 수준의 검색을 수행 할 수 있어야합니다. 즉 특정 지역 (북쪽 또는 남쪽)에 속한 모든 사용자를 찾을 수 있어야합니다.

내 사용자 테이블에 region_id 필드를 포함하면 더 쉽게 사용할 수 있습니까? 아니면 정상화 개념에 반대하는 것입니까?

+0

지역 내에서 더 많은 계층 구조 수준을 원하십니까? –

+0

아니요 두 레벨 (지역 및 도시) 만있을 것입니다. – GSTAR

답변

2

테이블 구조를 비정규 화하고 데이터 업데이트 이상을 초래할 수 있습니다. 고려 : 사용자가 맨체스터에서 런던으로 이동하고 city_id가 변경됩니다. region_id는 여전히 북쪽을 가리킬 수 있습니다.

region_id 은 도시에 따라 다르므로 사용자 테이블에 속하지 않습니다. 이후 그것은 도시에서 파생 될 수 있습니다.

+0

True .. 그러나 region_id는 city_id와 동시에 업데이트됩니다. 나는 그 우려를 이해한다. city_id 만 저장하면 지역 검색이 좀 더 복잡해집니다. – GSTAR

+0

정상화는 복잡성에 관한 것이 아니라 데이터 일관성에 관한 것입니다 :-) 그것은 당신의 삶을 편하게 만듭니다. 누구나 정상화가 너무 어렵다는 주장을 할 수 있습니다. 모든 데이터를 하나의 큰 테이블에 넣기 만하면됩니다. 그것은 처음에는 가장 쉬울 것입니다 ... –

+0

@ GSTAR : 정규화는 보장 된 정확성과 교환하여 어느 정도의 복잡성을 가져옵니다. –

0

설계가 절대적으로 2 단계 만 (지역 및 도시)을 요구하고 향후 다른 수준의 추가 가능성을 기꺼이 감당할 의사가있는 결정이 아니라면 보다) 사용자 테이블에 regionID를 포함하지 마십시오. 그것은 데이터베이스를 비정규 화합니다. 대신 데이터를 나타내는 여러 가지 선택 사항 (두 개의 관련 테이블, 지역 및 도시 포함)이 있으며 사용자 테이블로 도시 테이블을 조인하거나 검색에서 IN 절을 사용하여 검색을 수행합니다.