리무진 회사 용 데이터베이스를 구축하려고하는데 고객, 운전자, 제휴사 및 주문과 관련된 주소에 대해 정규화가 얼마나해야하는지에 대해 고민했습니다.주소에 대한 데이터베이스 정규화
는 기본적으로 제휴 및 드라이버의 주소는 다음과 같습니다 : address_line_1, address_line_2, 도시, 주, 우편 번호,
내 문제가 주문 및 고객 주소에서 오는 국가를. 그들은 다음과 같아야합니다 : address_line_1, address_line_2,시,도, 우편 번호, 국가, address_type_1 (집, 직장), address_type_2 (픽업, 드롭 오프 - 주문에만 포함하면됩니다.)
그래서 모든 4 개의 테이블 사이에는 고객 필드와 주문 테이블이 다른 두 필드를 제외하고 주소 필드에 유사점이 있습니다.
모든 레코드가 고유 ID로 식별된다는 점을 언급해야합니다. 예 :
고객 ID - 10,000 - 99,999
주문 ID - 100000 - 제한 없음
드라이버 ID - A1 - A999 (아마도)
제휴 ID - 1000 - 9999
이것들은 단지 예일 뿐이므로 이해하는데 많은 시간을 소비하지 마십시오.
정규화 된 데이터베이스를 만드는 데 몇 개의 주소 테이블을 사용해야합니까?
한 주소 테이블의 모든 필드를 포함하여 플러스 주소의 유형 (고객, 주문, 제휴, 드라이버)를 설명하는 별도의 하나를이 순간에
나는 내 마음 속에 세 가지 아이디어를 가지고있다. 이건별로 좋아하지 않아.2 개의 주소 테이블. 하나는 운전자 및 계열사이고, 다른 하나는 고객 및 주문입니다. 두 번째 테이블에 대해서는 고객에게 항상 NULL이 될 필드가 있습니다. 이것도 맘에 들지 마라.
세 개의 주소 테이블. 하나는 운전자 및 계열사 용이고 하나는 고객 용이고 다른 하나는 주문 용입니다. 사용하지 않는 필드가 없기 때문에 다른 두 필드보다 더 나은 옵션이 될 수 있다고 생각하게됩니다.
누구나이 세 가지 옵션 또는 더 나은 옵션에 관한 조언을 제공합니까?
고마워요.
UPDATE :
이 테이블 ID의 번호 체계에 대해 아직 걱정하지 마십시오. 그것은 단지 예일뿐입니다. 나는 여전히 최고의 넘버링 시스템을 이해할 시간이 없었다. 일단 내 문제가 해결되면 문제가 해결 될 것입니다.매트의 대답에서 나는 운전사를 떠나고 주소가 포함 된 테이블을 떠나고 어떻게 든 고객과 주문 테이블을 정리하려고한다.
고객이 쉽게 액세스 할 수 있도록 프로필에 저장하려는 여러 주소 (집, 직장 1, 직장 2, 즐겨 찾는 장소 등)를 고객이 가질 수 있기 때문에 분명히 주소 표가 필요합니다.
문제의 방정식을 조금 바꿀 수있는 주문 테이블에 대해 언급하는 것을 잊어 버렸습니다. 모든 주문에 대해 PICK-UP 및 DROP-OFF 위치가 필요합니다. 그러나 이것은 주소 (거리 주소) 또는 공항 일 수 있습니다. 즉, 번지와 관련된 필드는 공항 특정 필드와 일치 할 수 없습니다. 그래서 4 개의 엔티티 (pu_address, pu_airpot, do_address, do_airport)를 테이블 (모든 특정 필드가있는) 안에두면 사용하지 않는 공간과 프로그래밍 혼란에 빠질 것이라고 확신합니다. 예 : 픽업 필드에 대해 : Address_type, Address_line_1, ..., 주, 국가, 공항, 항공사, Flt 번호, ... 및 픽업과 동일한 내용을 삭제하십시오.
그래서 전진하는 방법에 대해 잘 모르는 주문 테이블에 여전히 문제가 있습니다. 여분의 테이블을 사용하거나 사용하지 않고 주소와 공항 픽업 및 드롭 오프 장소가 모두 필요합니다.
업데이트 감사합니다. Matt. 첫째, 네, 별도의 필드에 주소를 저장합니다. 주문에 대한 문제는 여전히 남아 있습니다. 나는 어떤 유형의 우레탄에 대한 예를 제시하고 리무진 서비스를 사용합니다. 주소 : 123 Main St, Chicago, Il, 60640; 공항 : ORD, AA, 123. 나는이 모든 밭을 어떤 식 으로든 테이블에 통합해야합니다.
옵션 : 주문 테이블
ORDER_ID, ..., 공항, 필드, 모두 공항과 주소 필드 드롭 오프 필드에 주소를 모두 가질 필요가 픽업 필드.
이 옵션은 여전히 적합하지 않습니다.
다음으로 두 개의 여분의 테이블이 있어야합니다. 하나는 주소 (픽업 또는 드롭 오프를 인식하는 필드 포함)입니다. 다른 하나는 공항을위한 것입니다.
주문 레코드에 대한 정보를 검색하기 위해 두 가지 쿼리를 수행해야하기 때문에이 옵션도 마음에 들지 않습니다. 먼저 주문 정보를 검색하고 픽업 및 드롭 오프 (공항 또는 주소) 유형을 알고 나면 특정 픽업 및 드롭 오프 정보를 검색하는 또 다른 쿼리를 수행합니다.
그래서 다시 ... 내가 뭘 잘못하고 있니? 내가 놓친 게 있니?
그리고 네, 확실히 일부 주소록이 올바른지 확인 시스템을 사용할 것입니다.
매트 - 주소를 사용하는 방법과 사용되는 데이터의 양에 따라 추가 할 수도 있습니다. 일반적으로 흔치 않은 주소를 다른 테이블로 분리하는 것이 가장 좋습니다. 이렇게하면 데이터베이스의 레코드 페이지 크기에 따라 성능이 향상 될 수 있습니다. 그러나 성능상의 이유로 여기서는 적용되지 않을 수 있습니다. – tsells