먼저 항상 친절한 답변에 감사를 드립니다.
원래 제가 DB쪽을 깊게 파지 않고, 되는데로 사용하다가
이로적인 면으로 접근을 하면서 공부하니까. 좀 헷갈리는것 같습니다.^^
먼저 이해해 주시고요..
공부를 약간 해보려고 일단 대학교때 배웠던
'데이터베이스 이론' 인가 하는 책을 조금 속독을 했구요
지금은 ERwin 을 깔면 들어있는 문서인 Method Guide 라는 문서를
보고 공부하고 있습니다.
아 그리고 제가 질문드리는 개념이나 단어들은
Physical layer 쪽에서 들어주시기 보다는
Logical layer 관점으로 들어주시면 좀더 답변해주시기 수월하실꺼고
최종 질문 단계에서 아마 Physical layer 관점이 조금 들어갈것 같아요
각설하고... 다시한번 질문을 드리자면.
새로운 간단한 예제로 질문을 드리겠습니다.
(ERD 를 그림으로 첨부합니다.)
먼저 2개의 엔티티 (TEAM, PLAYER) 가 있습니다.
그리고 1:N 관계로 정의를 하겠습니다.
부모엔티티, 자식엔티티 개념은 계속 나오고 있네요..
이모델에서는
TEAM : 부모엔티티
PLATER : 자신엔티티
로 일단 정의를 하고 있습니다.
질문 1. 부모와 자식 엔티티를 확연히 나누는 기준이 있는지요?
저같은 경우는 일단 엔티티를 놓으면 그냥 동물적으로
이건 부모엔티티다, 자식엔티티다 감이 와서 그냥 그렇게 하거든요
그리고 관계가 실선으로 되어 있는것은 종속적인 관계를 의미 한다고 합니다.
종속적인 관계에는 existence dependent, identification dependent 이렇게 두가지가 있는데
이 모델에서는 existence dependent는 아니지만 identification dependent랍니다.
즉, 선수는 팀에 속해있지 않아도 존재할수 있기떄문에 existence dependent 가 아니고
선수는 팀의 team-id 키 없이는 분간할 수 없기때문에 identification dependent라고 합니다.
질문 2. existence dependent, identification dependent 의 개념에 대해서는
대충을 이해하겠는데, 특히 identification dependent 개념이 조금 모호합니다.
이걸 조금 쉽게 설명해 주실수 있는지?
일단 여기까지고
이제 Physical layer 적인 관점(?)으로 질문을 드리면
그림에서 보시다시 PLAYER의 team-id가 FK로 설정이 되어 있습니다.
질문 3. 이 관계를 어떻게 표현해야 하는지
PLAYER의 team-id 는 TEAM에 대해서 FK 로 되었다 로 표현하나요?
TEAM은 PLAYER의 team-id 를 FK로 가지고 있다고 표현해야 하는지?
어느 엔티티의 관점에서 봐야할지 헷갈립니다.
질문 4. FK가 있기때문에 부모의 튜플들을 삭제할수 없다가 아니라
이 관계를 DB스키마를 작성할때 FK constraint 를 걸어 줄때 정해주는
것에 따라 정해진다는것이 맞는지요?
이 질문은 지난 코멘트에서 거의 이해가 됬습니다.
그럼 한가지, MySQL과 같이 FK 가 지원하지 않는 DB는
이것을 프로그래머가 프로그램로직에서 FK constraint 을 고려해야
한다는 것인가요?
이상 질문이었습니다.
헥헥 여기까지 읽어주셔서 너무 감사드리고요.
기왕 읽으셨으면 좋은 답변도 감사드리겠습니다.
참고로 아래 ERwin 에서 Forward Engineering 으로 뽑은
스키마 입니다.
CREATE TABLE PLAYER (
age INTEGER NULL,
player_name VARCHAR2(32) NULL,
player_id VARCHAR2(32) NOT NULL,
team_id VARCHAR2(32) NOT NULL
);
ALTER TABLE PLAYER
ADD ( PRIMARY KEY (player_id, team_id) ) ;
CREATE TABLE TEAM (
team_id VARCHAR2(32) NOT NULL,
owner VARCHAR2(32) NULL,
team_name VARCHAR2(32) NULL
);
ALTER TABLE TEAM
ADD ( PRIMARY KEY (team_id) ) ;
ALTER TABLE PLAYER
ADD ( FOREIGN KEY (team_id)
REFERENCES TEAM ) ;
|