나는이 방법 (I이 qeustions에 대한 일부 필드, 사람보고) 설계 간단한 customers
테이블이 : 널 (null)와SQL : 선박/송장 주소와 SELECT CONCAT 문제에 대한 테이블 디자인
+ ----------- + --------------- + ---------------- +
+ customer_id + invoice_address + ship_address +
+ ----------- + --------------- + ---------------- +
+ 33 + 234, Walnut Ave + null +
+ ----------- + --------------- + ---------------- +
+ 47 + 66, Smart Ave + null +
+ ----------- + --------------- + ---------------- +
+ 47 + 4, Cool Ave + 45, Dark Street +
+ ----------- + --------------- + ---------------- +
행 ship_address는 운송을 위해 고객의 인보이스 주소를 사용해야 함을 의미합니다.
첫번째 질문 :이 충분히 좋은 디자인, 또는 모든 null
ship_address
필드는 null
왼쪽 송장 주소 (심지어 동일한 경우) 및하지로 가득해야합니다.
두번째 질문 : 같은 디자인을 유지 (심지어 경우에 그것의 나쁜 디자인), (가능하다면) 내가 각 행에 대해 항상 하나의 주소를 반환하는 SELECT 쿼리를 만들려면 어떻게해야합니까 방법 : ship_address
하지 null
, 그렇지 않으면 단지 invoice_address
, 같은 : MySQL의 DB에 대한
SELECT CONCAT_IF_SHIP_ADDRESS_NOT_NULL_OTHERWISE_USE_ONLY_SHIP_ADDRESS(invoice_address, ship_address) AS address FROM customers;
쿼리.
감사합니다.
이것들은 실제로 정말 독특한 곳을 배우게 해주는 답 유형입니다. 이 디자인은 훌륭합니다. 유일한 부작용은 고객 (주소 포함)에 대한 간단한 SELECT가 항상 JOIN이 필요하다는 것입니다. 그러나 Prodcution과 DB가 거대해질 수 있기를 기대하는 것은 확실히 올바른 길입니다. –
사실 고객 - 주소가 n : m 관계이기 때문에 같은 주소가 둘 이상의 고객에게 동일 할 수 있습니다 (즉, 같은 회사의 다른 직원, 나는 선박 주소와 동일한 회사 주소를 사용합니다). 그러나 고객 주소록에서 CustomerAddressXref 테이블도 이것을 처리 할 수 있습니다. BTW : 저는시, 주, .. fileds를 이미 분할 했었습니다. 간단하게 유지하기 위해 질문에 쓰지 않았습니다. –
고객이 주소를 변경하면 어떻게됩니까? 고객의 이전 인보이스 주소는 역사적인 목적으로 변경되어서는 안됩니다. 그 때해야 할 일은 무엇입니까? – greaterKing