머리가 나쁜건지 제가 단순한거 같은 디비 개념에 요즘 애를 먹고 있어요 ㅠ_ㅠ
[매물 테이블] 과
[고객 테이블] 이 있는데요
지난번에 모르고 글 삭제해버린 그 내용이에요;
조건은
한 매물에는 여러명의 고객이 있을 수 있고
한 고객은 여러개의 매물을 가질 수 있어요
매물 정보를 보면 해당 매물을 가진 고객 리스트가 떠야하고
고객 정보를 보면 해당 고객이 가진 매물 리스트가 떠야 하거든요
그래서 n:n이라고 생각을 해서
중간에 [연결 테이블] 을 만들어 줬어요
매물테이블 - 매물id, 매물연결id
고객테이블 - 고객id, 고객연결id
연결테이블 - 연결id, 매물연결id, 고객연결id
이런 식으로 테이블 구조를 만들어봤는데
데이터를 넣고 조인문을 만들어 봤더니
이게 문제가 생겼어요
select 매물id, 매물주소, *
from 매물테이블
inner join 연결테이블 as b on a.매물연결id=b.매물연결id
where b.고객연결id = 'A'
예를 들면 위에는 '한명의 고객이 가지고 있는 모든 매물'을 구할때 저렇게 위처럼 조인문을 줬구요
아래는 연결 테이블 내용인데
매물연결id 로 묶인 데이터까지 모조리 나와버리더라구요
-------------연결테이블---------
연결id 매물연결id, 고객연결id
--------------------------------
1 1001 A
2 1002 A
3 1001 B
4 1001 C
5 1003 C
6 1005 D
7 1006 E
8 1005 E
9 1006 F
10 1009 A
어떻게 테이블 구조를 만들어야 제가 원하는 내용대로 될까요?;
뭉충님의 도움이 필요합니다 ㅠㅠ
헤븡님이 db설계시 살짝 헷갈리신게.. 테이블의 성격을 모호하게했기 때문입니다.
테이블 설계할때는 그 테이블의 성격을 명확하게 나타내줘야 합니다.
헤븡님이 설계하신 테이블 구조를 보니깐 마스터 테이블(기초 정보를 저장하는 테이블)과 그 마스터 테이블간의 관계를 연결하는 관계 테이블 이렇게 2가지 성격으로 나뉘면 될것 같습니다.
기초적인 정보를 저장하거나 각 데이터의 마스터역할을 하는 정보들을 모아둔 테이블을 마스터 테이블이라고 합니다.
매물, 고객은 각각 매물과 고객정보를 저장하는 마스터 테이블이 될 수 있습니다.
헤븡님은 이 마스터 테이블에 관계정보 성격까지 같이 넣으려다보니 테이블의 의미가 불명확해져서 쿼리만들기도 힘들고... 나중에 다른 사람이 인수인계해서 볼때도 분석하기 힘들어 집니다.
2개의 마스터 테이블(매물, 고객)이 각각 있다면 이 마스터 테이블들간의 관계를 나타내주는 "관계 테이블"을 따로 만들면 됩니다.
그래서 헤븡님의 설계를 약간 변경하면 아래와 같을것 같습니다.
물론 아래가 정답은 아닙니다. 코딩이든 db설계든 어떤 곳에 촛점을 두고 설계하느냐에 따라서 설계가 사람마다 천차만별입니다.
저 같으면 아래와 같이 설계하겠다는 겁니다.
매물테이블 - 매물id,
매물연결id고객테이블 - 고객id,
고객연결id연결테이블 - 매물id, 고객id
테이블은 위와 같이 만들고 쿼리는 아래와 같이 짭니다.
select c.매물id, c.*
from 연결테이블 a
inner join 고객테이블 b on a.고객id = b.고객id
inner join 매물테이블 c on a.매물id = c.매물id
where b.고객id='A'