수업시간에 배운 내용을 간단히 정리해 드릴께요. 이글을 보시고 잘못된 사항이 있으면 수정해주세요.
이것은 데이타베이스 책에서 인용한 부분입니다.
우선 프라이머리키에 대해서는 아시는것 같아서 설명을 빼겠습니다.
예를 들어서 설명을 해보겠습니다.
두개의 DB가 있습니다.
학생DB 수강DB
ㅡ---------- ----------------------
학번 | 이름 학번 | 과목명 | 성적
------------ ----------------------
1111 | 갑 1111 | 영어 | A
2222 | 을 1111 | 수학 | B
3333 | 병 2222 | 영어 | C
3333 | 과학 | A
3333 | 수학 | C
위에서 학생DB의 프라이머리키는 당연히 학번이 되겠지요. 학번이 겹치는 학생은 없어야 되니까요. 그런데 수강DB에서 학번을 프라이머리키로 잡을수가 없습니다. 왜냐면 그렇게 되면 한 학번에 해당되는 사람은 여러과목 수강신청을 할 수 가 없게 되기 때문이죠.
그래서 수강DB에서는 학번+과목명을 프라이머리키로 잡습니다. 한 학번이 한과목을 두번신청할 수도 해서도 안되니까요.
즉 학생DB에서 학번은 프라이머리키지만 수강DB에서 학번은 포린키가 됩니다. 위와 같이 작성하는경우 두개의 DB에서 한 속성(학번)을 공통적으로 보유함으로서 서로 연결이 됩니다. 정확하게 말하자면 수강DB는 포린키(학번)을 통하여 학생DB를 참조하게 되는거죠.
이때 주의해야 할것이 있는데 포린키값은 해당 프라이머리키가 취하고 있는 값들중에 하나와 일치하거나 혹은 Null이어야한다는겁니다. 우선 Null 인경우는 설명이 길기 때문에 제외하고 말씀을 드리겠습니다. 우선 수강DB의 학번필드의 값은 반드시 학생DB의 학번필드의 있는 값만을 허용해야합니다. 그리고 현재 수강DB의 학번+과목이 프라이머리키이므로 학번에 Null값이 허용이 되지 않습니다. 그렇지 않을경우 데이타베이스의 참조무결성 제약조건이 성립이 되지 않기때문이죠. 물론 참조하는 포린키가 위 상황에서는 Null값이 허용이 안되지만 허용이 되는 경우도 있습니다.
포린키란 다른DB에서 프라이머리키로 설정된 속성을 참조하기 위한 키라고 말씀을 드리고 싶군요. 정확한 표현일지는 확신이 없네요.
음... 말이 너무 두서가 없는것 같군요. 잘 설명이 되었나도 모르겠구요. 우선은 제가 스타트를 끊었으니까. 다른 고수님들께서 더욱더 자세히 쉽게 설명을 해 주실거라 믿고 이만...
1. 포린키는 다른 테이블의 기본 키를 참조하는 하나의 컬럼 또는 컬럼들의 집합입니다.. 서로 다른 테이블을 연결 시키는 역할을 하죠.. 그리고 이렇게 포린키 관계로 연결이 되면 참조 무결성을 강화 시킬 수 있습니다. 즉 잘못된 자료의 삽입을 첵크 할 수 있게 되는 것이지요..
2. 왜 포린키를 사용하는가?
만약 A 테이블이 전국의 은행정보, B 테이블은 모든 각 은행들의 계좌번호를 관리 한다면..A테이블의 은행이름은 Primary Key가 되고 B테이블의 은행이름은 포린키로 설정 될 수 있겠죠...이렇게 되면 A테이블과 B테이블간의 JOIN이 가능하게 되며... 또 B테이블에는 A 테이블에 등록되지 않은 은행이름을 절대 INSERT 할 수 없게 됩니다... 이것을 참조 무결성이라고 하죠..
> 안녕하세요
>
> 책을 보다가 포린키에 대한 설명이 간략히 나와 있어서
> 책대로 포린키를 만들었는데 어떻게 사용해야 하는지 사용 방법을 모르겠거든요.
>
> 1. 포린키라는게 어떤건지??
> 2. 왜 포린키를 사용을 하는건지??
> 3. 포린키의 사용 방법을 예를 들어서 설명해주실수 있는지요??
>
> 저는 이제까지 포린키를 사용하지 않고 프라이커리 키값으로 자료를 찾아서
> 사용을 하고 있는데....
>
> 데이터 베이스는 MS-SQL7.0, 델파이는 4.0을 사용 중입니다.
수업시간에 배운 내용을 간단히 정리해 드릴께요. 이글을 보시고 잘못된 사항이 있으면 수정해주세요.
이것은 데이타베이스 책에서 인용한 부분입니다.
우선 프라이머리키에 대해서는 아시는것 같아서 설명을 빼겠습니다.
예를 들어서 설명을 해보겠습니다.
두개의 DB가 있습니다.
학생DB 수강DB
ㅡ---------- ----------------------
학번 | 이름 학번 | 과목명 | 성적
------------ ----------------------
1111 | 갑 1111 | 영어 | A
2222 | 을 1111 | 수학 | B
3333 | 병 2222 | 영어 | C
3333 | 과학 | A
3333 | 수학 | C
위에서 학생DB의 프라이머리키는 당연히 학번이 되겠지요. 학번이 겹치는 학생은 없어야 되니까요. 그런데 수강DB에서 학번을 프라이머리키로 잡을수가 없습니다. 왜냐면 그렇게 되면 한 학번에 해당되는 사람은 여러과목 수강신청을 할 수 가 없게 되기 때문이죠.
그래서 수강DB에서는 학번+과목명을 프라이머리키로 잡습니다. 한 학번이 한과목을 두번신청할 수도 해서도 안되니까요.
즉 학생DB에서 학번은 프라이머리키지만 수강DB에서 학번은 포린키가 됩니다. 위와 같이 작성하는경우 두개의 DB에서 한 속성(학번)을 공통적으로 보유함으로서 서로 연결이 됩니다. 정확하게 말하자면 수강DB는 포린키(학번)을 통하여 학생DB를 참조하게 되는거죠.
이때 주의해야 할것이 있는데 포린키값은 해당 프라이머리키가 취하고 있는 값들중에 하나와 일치하거나 혹은 Null이어야한다는겁니다. 우선 Null 인경우는 설명이 길기 때문에 제외하고 말씀을 드리겠습니다. 우선 수강DB의 학번필드의 값은 반드시 학생DB의 학번필드의 있는 값만을 허용해야합니다. 그리고 현재 수강DB의 학번+과목이 프라이머리키이므로 학번에 Null값이 허용이 되지 않습니다. 그렇지 않을경우 데이타베이스의 참조무결성 제약조건이 성립이 되지 않기때문이죠. 물론 참조하는 포린키가 위 상황에서는 Null값이 허용이 안되지만 허용이 되는 경우도 있습니다.
포린키란 다른DB에서 프라이머리키로 설정된 속성을 참조하기 위한 키라고 말씀을 드리고 싶군요. 정확한 표현일지는 확신이 없네요.
음... 말이 너무 두서가 없는것 같군요. 잘 설명이 되었나도 모르겠구요. 우선은 제가 스타트를 끊었으니까. 다른 고수님들께서 더욱더 자세히 쉽게 설명을 해 주실거라 믿고 이만...