2012-10-07 4 views
0

우편 주소와 정치 부서를 정규화 된 방식으로 저장하여 중복성이 없도록 할 수 있습니까? 모든 주마다 자체 구조가 필요한 경우에도 모든 주에 적용 할 수 있어야합니다.우편 주소와 정치 부문을 정규화 된 방법으로 저장하는 방법은 무엇입니까?

단지 주소를 저장하는 것이 아닙니다. 마을 등에 관한 추가 정보를 첨부하고 싶습니다.

+0

당신이 하나 개의 크기를 찾을 수 있습니다 모르겠어요은 모든 것을 국제적으로 적용입니다 맞습니다. 아니면 한 국가의 솔루션 만 원하십니까? 그렇다면 지정하십시오. – fvu

+0

@fvu 하나 이상의 국가가 있어야하지만 모든 국가에 대해 동일한 테이블을 사용할 필요는 없습니다. –

+0

왜 여기에 아무도 데이터 모델 패턴 책을 읽지 못합니까? –

답변

1

가장 표준화 된 방법은 국가와 같은 테이블을 만들 수 있다는 것입니다. '노드'는 모두 다음 테이블과의 일대 다 관계에 있습니다. ,

CREATE TABLE countries (
    country_id integer NOT NULL, 
    name character varying(80) NOT NULL, 
    symbol_3 character(3), -- i meant ISO-code 
    symbol_2 character(2), -- ISO -code as well 
    citizenship character varying(50) -- not obligatory in my case 
); 

CREATE TABLE states (
    state_id integer NOT NULL, 
    country_id integer NOT NULL, 
    name character varying(50) NOT NULL 
); 

CREATE TABLE cities (
    city_id integer NOT NULL, 
    state_id integer NOT NULL, 
    name character varying(80) NOT NULL 
); 

CREATE TABLE zips (
    zip_id integer NOT NULL, 
    city_id integer NOT NULL, 
    number character(5) NOT NULL 
); 

CREATE TABLE addresses (
    address_id integer NOT NULL, 
    zip_id integer NOT NULL, 
    street text NOT NULL, 
    notes text 
); 

데이터베이스의 속성의 대부분이 NOT NULL로 선언해야합니다 (최적의 설계 사례와 함께) 그 기억 : DDL 거 같이 국가들과 많은 관계로 하나되는 나라에서 시작 주로 성능 때문입니다.

그리고 다음 질문에 답하십시오 (이미 알아 내지 않았다면) zip은 db가 지원하는 여러 가지 숫자 데이터 유형 중 하나가 아닌 문자 유형으로 저장해야합니다. 왜? 우편 번호의 시작 부분에 0 또는 ziros로 채우는 것을 걱정하지 않으셔도됩니다. 숫자 형은 숫자 앞에 0을 자릅니다. 나는 아래 무엇을 의미하는지 보여주는

유용한 다이어그램 :

http://blog.blueage-software.com/pics/blog-images/ERD_country_province.jpg

+1

다른 도시에서는 [같은 우편 번호] (http://host.madison.com/wsj/news/local/ask/article_dd4efd2c-617a-11e0-876d-001cc4c002e0.html)를 공유 할 수 있습니다. –

+0

그것은 우리가 말하는 나라에 달려 있습니다. 그러나 통지에 감사드립니다. – Borys

+0

이 문제를 방지하려면 대리 키를 zips 테이블에 추가 할 수 있습니다. 그런 다음 필요한만큼 중복 된 우편 번호를 쓸 수 있습니다. – Borys

0

무엇이든 은 정규화 된 형식으로 저장해야합니다. 5th Normal Form과 Orthogonal design의 원리와 같은 도구를 사용하여 데이터베이스 디자인에서 특정 종류의 문제를 제거 할 수 있습니다. 그러나 모든 유형의 중복성을 제거하기위한 정상적인 형태의 주장은 없으며 그렇게하는 것이 바람직하거나 실현 가능하지도 않습니다 (정보 이론적 관점은 중복성이 데이터의 유용한 정보라는 것입니다).

당신은 도움이 당 데이터 모델을 찾을 수 있습니다 : -> 상태 -> 도시 -> 지퍼 -> 주소 내가 상상할 수 http://www.tdan.com/view-articles/5014/

+0

모델링 자체가 문제가되지 않습니다. 내가 속한 것이 무엇인지 모르겠다. 예 : 우편 번호는 무엇을 식별합니까? –

+0

제 경험상의 우편 번호는 식별에 제한적으로 사용됩니다. 일관성없는 주소를 검증, 강화 및 심지어 제외하는 소프트웨어 또는 데이터베이스를 구현할 수 있지만 코드가 주소의 일부를 판별하는 완전히 신뢰할 수있는 방법이라고 가정하는 것은 거의 사용되지 않습니다. 새로운 코드가 항상 발급되거나 철회되며 공식 우체국 데이터베이스조차도 일관성을 유지하지 못합니다. – sqlvogel