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
운영게시판
최근게시물
DBMS Q&A 275 게시물 읽기
No. 275
Re: [질문]FK 의 설정에 대해서.
작성자
서준원(linuxqna)
작성일
2002-01-08 13:25
조회수
8,909

제가 잠시 헷갈렸던것 같습니다.

일단 해주신 설명을 읽고, ERWin 으로 모델링을 해보니

 

제익님꼐서 답변해 주신 스키마가 나오더군요

제가 Parent Entity를 book 으로 잘못 오인했던것 같습니다.

 

다시 한번 정리하자면

 

자식 Entity 에 어떠한 애트리뷰트가

부모 Entity 의 어떠한 애트리뷰트에 대해서

FK 가 되었다면

 

1. 자식 Entity에서는 얼마든지 튜플을 삭제할 수 있지만

2. 부모 Entity에서 튜플을 삭제하려 한다면

자식 Entiy에 FK 가 걸린 자료가 남아있기 때문에 삭제할 수 없다

 

저의 정리가 맞는지 한번 코멘트 달아주시면 감사하겠습니다.

 

PS. DB를 맨날 엔지니어적으로 접근해서 주먹구구식으로 쓸떄는

잘 돌아갔는데,,

모델링적인 관점으로 접근해서 제대로 해보려니 힘들군요..

많은 도움 부탁드립니다.

 

 

-- 서준원 님이 쓰신 글:

>> 여태까지 막역히 DB를 써오다가 정확하게 공부하고 들어가려니 힘드네요

>> 예를 들어서 설명해 드리겠습니다.

>> "책" Entity 가 있고, "저자" Entity가 있습니다.

>> 각각의 애트리뷰트를 간단히 나타내면 다음과 같이 나타낼 수 있겠습니다.

>>

>> ---- 책-----

>> |#*ISBN |

>> | *저자이름 |

>> | 가격 |

>> ------------

>>

>> --- 저자 ---

>> |#*저자이름 |

>> | 주소 |

>> | 전화번호 |

>> ------------

>> (# : 식별자, * : 필수애트리뷰트)

>>

>> 이렇게 두개의 Entity가 있다고 가정할때

>> 이제 두 Entity간의 관계를 설정하려 합니다.

>>

>> 관계 1. [책 : 저자] 의 관계는 [일대일 관계]라 가정

>> 관계 2. 책은 저자에 대해서 필수

>> 저자는 책에 대해서 필수

>>

>> 일때

>>

>> 질문1. "책의 저자이름" 애트리뷰트가 저자 Entity 에 대해서 FK가 되는것이 맞는지?

>> 질문2. 만약에 "저자"테이블에서 한개의 튜플을 지우려 한다면

>> 아직 "책"테이블에는 저자를 참조하는 데이터가 남아 있기 때문에

>> 지우지 못하는 상황이 일어나는것이 맞는지요?

이 글에 대한 댓글이 총 1건 있습니다.

FK 라는 개념은 부모와 자식이라는 개념과는 틀립니다. 부모와 자식이라는 개념은 오히려 OO (object-oriented) 환경에서 적합한 표현이 아닐까 하는 생각을 해 봅니다.

 

각설하고... 일단 동등한 위치로 생각을 해 볼때... (준원님의 경우는 FK 를 제공해 주는 원래의 테이블을 부모로 생각하신 듯 하군요)

 

(준원님의 표현대로 부모/자식으로 표현하겠습니다)

 

1.번 자식 Entity 에서는 얼마든지 튜플을 삭제 할수 있습니다. 이것은 부모의 Entity 에 전혀 영향을 미칠수 없습니다.

2번. 보무 Entity 의 튜플을 삭제할려면 즉 자식 테이블의 FK 가 되는 원래의 튜플이 사라진다면... 이것을 참조로 하는 해당 자식놈이 있기 때문에 이를 삭제할 수 없다는 생각은 틀린 것입니다. 자식놈이 자신을 참조하고 있어도 부모를 삭제할 수 있습니다. 그럼 자신을 참조하는 자식 값은 어떻게 할것이냐... 이것은 FK constraint 를 걸어 줄때 정해 줍니다. 자식의 값은 NULL 로 바꾸라고 하던지 (SET NULL)또는 비록 부모 값이 없더라도 기존에 입력된 자식 값들은 없어진 부모 값을 유지하라던지 (SET NO ACTION), 또는 해당 부모가 없어 지면 자식도 같이 지우라고 하던지 (CASCADE) 등등의 동작을 미리 정해 주는 것입니다.

 

만약 위의 글이 이해가 가질 않는다면 다시 자세하게 문서를 만들어 올리도록 하겠습니다. 그렇게 어려운 개념은 아니므로 자세하게 읽어 보시고, 테스트 해 보시기 바랍니다.

정재익(advance)님이 2002-01-09 00:49에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
291한번에 찾는 like 는 없나요..?
이효택
2002-01-13
7680
287버클리 DB에 관한 질문
백민준
2002-01-11
7639
289┕>Re: 못찾으신 것 같군요. [1]
정재익
2002-01-13 08:44:32
7880
276[질문]추가적인 애트리뷰트가 필요할떄, 그것을 어떻게? [1]
서준원
2002-01-08
7648
277┕>답변 감사하고 수정된 질문 내용입니다.(죄송)-_- [1]
서준원
2002-01-09 08:26:08
8060
273[질문]FK 의 설정에 대해서. [2]
서준원
2002-01-08
8124
275┕>Re: [질문]FK 의 설정에 대해서. [1]
서준원
2002-01-08 13:25:36
8909
278 ┕>[질문]죄송.. 약간의 풀리지 않는 궁금점이 남아서
서준원
2002-01-09 09:02:06
8120
284  ┕>Re: [질문]죄송.. 약간의 풀리지 않는 궁금점이 남아서 [1]
김대성
2002-01-09 23:48:18
9088
267[질문]PK가 너무 많아서.. 설계가 잘못된 것인가요? [1]
서준원
2002-01-07
7837
268┕>Re: [질문]PK가 너무 많아서.. 설계가 잘못된 것인가요?
서준원
2002-01-07 16:23:14
8234
266[질문]주소록 스키마좀 봐주세요 [1]
서준원
2002-01-07
8549
271┕>Re: [질문]주소록 스키마좀 봐주세요
김대성
2002-01-08 00:56:59
8580
253C-ISAM A.dat, A.idx를 Access로 Loader [1]
김대철
2002-01-05
8032
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다