2014-01-12 1 views
3

Mysql 및 INNODB 엔진을 사용하여 전자 상거래의 데이터베이스 구조를 만들고 있습니다.고객 여러 주소 및 기본 주소에 대한 mysql 데이터베이스 디자인

포인트 1 : 내가

내가 올바른 방법으로 그 일을하고 있는가이 테이블을 가지고있는 고객을위한 여러 개의 주소를 만들려면? 기본 주소는 어떤 테이블에 저장해야합니까?

포인트 2 : "supplier_address"테이블이있는 주소에 "Suppliers"라는 테이블을 연결해야합니까? 아니면 더 좋은 방법이 있습니까?

포인트 3 : 도시와 국가의 테이블은 어떻습니까? 내가 뭔가를 추가해야합니까, 아니면 괜찮습니까? 어쩌면 두 테이블 사이에 다른 테이블의 "구역"필드가 있을까요?

답변

4

내 견해로는 너무 복잡합니다. 지나치게 정규화 된 주소 스키마를 만들 필요가 없습니다.

customer_id 
address_ordinal (small number for each customer: 0,1,2,3 etc). 
primary (boolean) 
address_1 
address_2 
locality (city, village, etc) 
province (state, etc) 
postcode (zip, postcode etc) 
country 

customer_idcustomer 테이블에 대한 외래 키 다음과 같이 다수의 고객 주소를 처리 내가 본 대부분의 시스템은, 주소 테이블이 다음 당신처럼 고객 테이블을 가지고 있고. 기본 키는 (customer_id, address_ordinal)의 합성어입니다. 주소가 기본 주소 인 경우 primary 열은 true입니다.

공급 업체에 관한 질문에 대해서는 "연락처"라는 공통 테이블을 만들고 고객과 공급 업체 모두에게 contact_ids를 제공 할 수 있습니다.

시스템에 (우편 번호, 지역, 지방) 행이 들어있는 참조 테이블 (데이터 공급 업체에서 구입 한 것)이 포함되어 있으면이를 사용하여 주소 테이블을 채울 수 있습니다. 하지만 하드 코드 된 우편 번호 만 포함되도록 주소를 강요하지 않아야합니다. 이러한 참조 테이블은 매우 빠르게 구식입니다.

+0

address_ordinal 필드에 무엇을 삽입합니까? 주소가 다른 도시에 있거나, 다른 지역에 있고, 다른 우편 번호가 있다면 어떨까요? – Manuel

+0

일부 주소에는 두 줄 (예 : 1120 Park Avenue/Apartment 102)이있을 수 있습니다. 그래서'address_1'과'address_2' 컬럼이 있습니다. 특정 customer_id에 하나의 주소 만있는 경우 서수는 0입니다. 다른 고객 ID를 추가하면 서수는 1이됩니다. –

0

나는 올빼미 진부한 말로 대답을 시작할 것입니다. "고양이를 피하는 방법은 여러 가지가 있습니다." 즉, 몇 가지 제안 사항이 있습니다.

포인트 1 - 고객이 여러 주소 (예 : 청구 및 우편)를 사용할 수 있다고 가정하면 별도의 매핑 테이블에 대한 올바른 아이디어를 얻을 수 있습니다. default 또는 preferred 또는 이와 비슷한 customer_addresses에 필드를 추가하는 것은 나쁜 생각은 아니지만 또 다른 옵션은 address_type이라는 새 필드를 추가하는 것입니다.이 필드는 두 개의 레코드 인 "Billing"및 "Mailing "그리고/또는 당신이 원하는 다른 무엇이든지. 그런 다음 주소 데이터를 사용하려는 코딩 응용 프로그램에서 컨텍스트 (예 : 결제 정보 페이지에있는 경우)에 따라 SELECT * FROM customer_addresses WHERE address_type = 2 /* Billing */과 같이 페이지 자체에서 사용하는 주소 유형을 코딩하십시오.

포인트 2 - 고객과 동일합니다.

포인트 3 - 단축 된 국가 이름을 표시 할 수 있도록 하시겠습니까? 예를 들어 "미국"을 "미국", "캐나다"를 "CAN"또는 "영국"을 "영국"으로 축약하십시오. 그 목적을 위해 축약 된 국가 이름 필드를 추가하는 것을 고려할 것입니다.

+0

감사!몇 가지 질문 : 포인트 1에서 고객이 기본 주소를 변경하려는 경우 해당 필드를 수정해야하지만 그렇게하는 동안 오류가 발생하면 어떻게해야합니까? 예를 들어 기본 주소가없는 사용자가 있습니까? 일관성이 없다고 생각합니다. 어쩌면 고객 테이블에이 필드를 추가하는 것이 더 좋을까요? – Manuel

+0

어쩌면 그것에 대해 생각하고 두 번째 옵션을 더 나은, 그래서 사용자가 하나의 addr을 저장할 수 있습니다 결제 및 배송 하나;) 또한 콜드 예를 들어 3을 추가하는 주소를 나타내는 고객이 실제로 isn ' 결제 또는 배송에 사용하지 마십시오! 당신이 그것에 대해 어떻게 생각하십니까? – Manuel

관련 문제