테이블 설계 0 12 940

by r-1y mysql 테이블 설계 데이터베이스 [2021.08.21 15:16:24]


안녕하세요 다들 이런 상황에서는 어떻게 쓰시는지 궁금해서 글을 남기게 되었습니다.

나중에 통계를 위해서 어떤 유저가 주문을 몇번했고 , 어떤 배송지에서 주문을 몇번 했는지 확인하려고 합니다 user와 address는 1:n 관계입니다 그러면 방법이 2가지가 있는데요

1. user_id를 주문 테이블에 안넣고 address_id만 들어가서 조인을 해서 데이터를 가져오는 방법
2. 주문 테이블에 user_id,address_id 둘 다 넣고 간단하게 조회하는 방법이 있는데  어떤 방법이 좋을까요?

2번 같은 경우는 데이터 무결성이 깨질수도 있습니다

by 동동동 [2021.08.23 09:39:38]

2번에 한표요..


by 마농 [2021.08.23 13:43:17]

일단 주문 테이블에는 user_id 가 있어야 할 것 같구요.
address_id 가 정확히 뭘 의미하는지 모르겠네요.
유저별 자주 쓰는 주소를 등록해 놓은 것일까요?
주문시 이 address_id 가 등록될 이유가 없을 것 같습니다.
주문에는 실질적인 주소가 입력되어야 할 것입니다.
즉, address_id 는 주소를 자동으로 불러오기 위한 장치로 사용될 뿐이지
이 address_id 정보가 주문정보에 입력될 필요가 없습니다.
배송지 주소는 자동 불어오기 뿐 아니라 수기 입력도 가능할 것입니다.
 


by r-1y [2021.08.23 16:35:23]

안녕하세요 address_id 같은 경우에는 유저의 배송지들입니다
address_id 외에 추가적으로 address 필드가 들어갑니다 현재 address_id 의 목적은 통계용입니다 
A 고객은 10번 주문을 했고 A-1 배송지에서는 5번 A-2 배송지에서는 5번 주문 통계를 알아야합니다.  

여기서 user_id를 안들어가도 된다고 생각하는 이유는 유저와 배송지가 1:n 관계로 묶여있기 때문에 join 통해서만 가지고 온다면 충분히 확인할 수 있다고 생각합니다


by 마농 [2021.08.23 17:01:34]

제 생각에 배송지 정보는 언제든 수정 및 삭제가 가능하리라고 봅니다.
배송지1의 정보를 서울에서 인천으로 중간에 수정했다고 하면
예전 배송정보를 조회할 때 서울로 배송되었음에도 인천으로 표시되는 오류가 발생될 수 있습니다.
따라서 배송 당시의 주소를 정확하게 표현하려면 배송지ID 가 아닌 주소 자체를 가지고 있어야 합니다.


by r-1y [2021.08.25 17:48:22]

제가 부연설명을 안해서 오해가 가도록 글을 적었네요 죄송합니다. 
주문 당시의 주소는 따로 varchar 필드로 저장하고 있는걸 전제하고 있습니다 


by jkson [2021.08.24 15:14:58]

user_id를 주문 테이블에 안 넣는다면 해당 주문을 어떤 유저가 한 것인지 어떻게 확인 가능한가요? address_id가 user_id에 종속적인 구조인가요?

address_id 1은 인천 송도구 구루비아파트 101호이고 이 address_id는 user_id 1의 주소이다 이런 식이예요?

주문과 유저의 관계를 항상 주소를 통해 조인해야한다면 통계 활용에 있어 더욱 비효율적일 것으로 보이네요.


by r-1y [2021.08.25 18:01:44]

네 address_id 가 user_id에 종속적인 구조 1:n 구조입니다.
지금은 기본적으로 주문 테이블에서 user_id, address_id를 가지고 있는 테이블 구조를 가지고 있는데 
이렇게 됬을때 잘못된 데이터 삽입시 데이터 무결성이 깨지는 구조를 생각해서 질문을 드렸는데 2번 케이스를 다들 선호하시는군요


by 마농 [2021.08.25 18:19:29]

답변 드리는 의미는 2번 케이스를 선호하는게 아닙니다.
user_id 는 필수이고, address_id 는 선택이라는 의미입니다.
데이터 무결성이 깨지는 것과는 전혀 상관이 없을 것 같은데요.


by r-1y [2021.08.25 18:41:16]

주문에서 user_id가 필요한 이유가 주문자를 알기 위해서인데 유저와 배송지가 1:n 관계라면 address_id로도 가능한게 아닌가요??  


by 마농 [2021.08.26 07:57:47]

왜 자꾸 핵심 키 정보인 user_id 를 배제하고
부수적인 정보인 address_id 에 집중하시는지요?
배송지 정보는 언제든지 수정 및 삭제가 가능한 정보로 판단됩니다.
만약 배송지가 삭제된다면? 주문에 대한 user_id 를 찾을 수 없겠죠.
address_id 가 필요에 의해 추가되는 것은 상관이 없으나
user_id 를 제거하는 것은 옳지 안다고 생각되네요.


by jkson [2021.08.26 14:26:12]

user1이 주문한 내용을 가져오려면 user1과 address_id를 조인하고 해당 address_id를 가지고 있는 주문을 찾아야겠군요. 뭔가 상당히 비효율적인 것 같지 않으세요?^^;


by 축구쟁이 [2021.08.27 16:53:57]

좀 더 생각해보시면 답변 달아주신 분들의 의도를 파악하실 수 있을 것 같습니다.

스스로에게 질문을 한번 던져보시기 바랍니다.

왜 address_id를 선택해야 하는지, 프로세스 진행이 문제없이 가능한지, 어떤 점이 득이고 실인지 생각해보시면 답이 나오실 것이라 생각됩니다. 

응원하겠습니다~

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입