▶ 뭉충닷컴
 
mungchung.com login
Site Search
My Space
주절주절...
공부방
쥔장소개
Board
자유게시판
유용한 정보
자료실
Programming
강좌 & Articles
Spring 3.0
프로그래밍 Tip
   -ASP
   -PHP
   -JavaScript
   -HTML
   -Java/JSP
   -Database
   -Crystal Report
   -Visual Basic
   -이클립스
   -리눅스
   -기타
Windows API (VB)
Spread Sheet 7.0
컴퓨터활용 Tip
Other things
StarCraft 전략
StarCraft 문서
김용(金庸)
Son Q & Dieda

뭉충닷컴

헤븡님이 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'