database.sarang.net
UserID
Passwd
Database
DBMS
ㆍMySQL
PostgreSQL
Firebird
Oracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
MySQL Q&A 27602 게시물 읽기
No. 27602
erd 사용 중 외래키 사용법
작성자
강원철
작성일
2008-06-15 23:39
조회수
4,585

A라는 테이블이 회원정보 테이블이라고 칠때

NO AUTO_INCREMENT PK
ID PK
NAME


B 테이블 뎃글테이블 과 1:n 관계자나요? dbdesigner4에서 1:n 관계 해버리면
원레 b테이블은 이 3개 였던것이

NO AUTO_INCREMENT PK
ID 글쓴이
COMMENT 내용


아래처럼 변해버립니다  A_ID 와 B테이블 ID랑만 연결되면 될꺼같은데 PK모두연결해버리내요?
NO 뎃글ID
ID 글쓴이
COMMENT 내용
A_NO A테이블 NO
A_ID A테이블 ID

제가 제대로 사용을 못하는것인지 __)
A_NO 까지 B 필드에 칼럼으로 만들기는 싫은데ㅠ.ㅜ ERD로 한번 만들어는 보고싶고..
알려주세요~ 이럴때는 어떻게 하시는지
이 글에 대한 댓글이 총 3건 있습니다.

PK를 두 개 설정하는 것이 이상하게 여겨지는군요.

PK는 말 그대로 Primary Key이므로, 외래키로 사용되기에 적합한 '하나의'키라고 생각하고 있었습니다만...

보여주신 A테이블은 PK가 두개군요. ID는 PK가 아닌 Unique정도로 사용하는 것이 옳다고 생각합니다.

 

위와 같이 고치시면 외래키가 두 개 생기는 문제도 자연히 해결될 것으로 보이네요. 저는 말씀해주신 툴을 사용해보지는 않았지만, 1:N관계에 대한 외래키는 대상 테이블의 PK를 그냥 가져오는 것으로 생각됩니다.

박현우(lqez)님이 2008-06-17 00:46에 작성한 댓글입니다.

넵 저도 no는 pk에서 빼버리고 싶은데 공동 작업자가 no가 있어야 작업이 편하다고
ai 로 넣자고 하네요 ai 일경우 pk가 아니면 안되는걸로 알고있는데

no를 ai 주는 방법은 어떻게 해야 할까요?

강원철님이 2008-06-17 09:55에 작성한 댓글입니다. Edit

auto_increment가 설정된 field는 index를 걸어줘야 하고,
B테이블의 ID는 이미 A테이블에서 foreign key로 들어올 것을 감안한다면 제거해야 하므로
(제거하지 않으면 1차 정규화도 만족시키지 못하게 됩니다.)

A테이블
NO: unique
ID: pk
NAME

B테이블
NO: pk
A_ID: foreign key
COMMENT
가 최종적으로 생성되는 형태가 맞을 것으로 보입니다.


하지만 보통 ID는 VARCHAR로 구성되는 것을 감안하면(키는 짧을 수록 좋으므로)
A테이블
NO: pk
ID: unique
NAME

B테이블
NO: pk
A_NO: forine key
COMMENT
도 대안으로 삼을만 합니다. (특히 ID바꿔달라고 쌩 쑈를 하는 고객이 있을 경우 -_-;; )


참고로 no를 pk에서 빼고 uniqe로만 설정을 하시는 것은 alter table을 참조하시면 되겠습니다.

우욱님이 2008-06-18 15:43에 작성한 댓글입니다. Edit
[Top]
No.
제목
작성자
작성일
조회
27608쿼리문 질문좀 드릴께요. [1]
오용규
2008-06-18
3223
27607쿼리 최적화좀 도와주세요..[해결완료] [2]
VQ
2008-06-18
3652
27603이런 것도 능한가요? ㅠㅠ (조인 or 서브쿼리?) [1]
졸던아이
2008-06-16
3924
27602erd 사용 중 외래키 사용법 [3]
강원철
2008-06-15
4585
27601root
ㅓㅓㅓㅓ
2008-06-15
3187
27600MySQLㄷㄷㄷ
JW
2008-06-15
3532
27599mysql 명령어로 command 창에서 데이터를 insert 시 질문입니다. [4]
김세윤
2008-06-15
3642
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.020초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다