Q&A

  • index key와 primary key에 대해서 ...
델파이로 데이터베이스를 작성하고자 하는데 index key와 primary key에 대해서 정확한 의미와 왜 사용하는지를 모르겠습니다. 여러 고수님들의 자세한 설명을 부탁드립니다. 가능하면 어떻게 틀린지와 어떻게 사용하는지에 대해서 알려주시면 감사하겠습니다.

1  COMMENTS
  • Profile
    임형호 1999.12.08 17:44
    saint wrote:

    > 델파이로 데이터베이스를 작성하고자 하는데 index key와 primary key에 대해서 정확한 의미와 왜 사용하는지를 모르겠습니다. 여러 고수님들의 자세한 설명을 부탁드립니다. 가능하면 어떻게 틀린지와 어떻게 사용하는지에 대해서 알려주시면 감사하겠습니다.



    저희가 수업시간에 DB를 배우는데... 음 교과서에 나온 내용을 제 나름대로 정리를 해보겠습니다.

    우선 DB에서 말하는 key란 한 개체타입에 속하는 개체하나 하나를 유일하게 식별할 수 있는 속성(또는 두 개 이상 속성의 조합)입니다. 즉 개체마다 key속성에 서로 다른 값을 취하고 있으므로 특정한 key값만 알면 어떤 하나의 객체를 확인하고 식별할 수가 있습니다.

    예를 들어 학생이라는 객체 타입의 속성에는 학번, 이름, 학과, 성별등이 있을겁니다. 그럼 이중에서 key가 될 수 있는것은 학번입니다. 이유는 이름, 학과, 성별등은 같은 값이 존재할 수 있기때문에 그 객체를 유일하게 구별할 수 가 없습니다. 그러나 학번은 절대 같을 수 가 없죠. 그런식으로 예를 하나 들면 대한민국국민이라는 객체타입에서는 만약 특정인을 찾는다면 key는 당연히 주민등록번호가 되겠죠? 주민등록번호만에 그 객체를 유일하게 구별할 수 있으니까요. 하지만 key값이 두개이상이 나올수도 있습니다. 가령 학번과 주민번호가 같이 나올수도 있겠죠. 그럴경우 둘다 key의 기능을 수행할 수 있으며 이두개를 후보키(candidate key)라고 하며 그 중에 하나를 선택해서 primary key로 설정합니다.



    primary key를 설정함으로써 얻을 수 있는 가장 중요한것은 데이타의 중복성을 예방할 수 있다는거죠. primary key로 설정된 경우 유일무이한 값을 가지게 되기 때문이죠.



    일반적으로 학생관리DB를 만든다고 가정할때 필드명이 학번, 학과, 학년, 이름, 성별등이 있습니다. 이중에서 학번을 primary key로 설정을 하게 되면 실제 DB에 똑같은 학번은 생성시킬수가 없습니다. primary key자체가 유일무이한 값을 가지게 되니까요. 그래야만 많은 자료중에서 해당 자료를 구별해 낼 수 있지 않겠습니까?

    프라이머리키는 2개이상의 필드를 조합해서도 만들수 있습니다. 어거지로 만들자면 학과, 학년, 이름을 하나로 조합해서 프라이머리키로 설정을 할 수 도 있습니다. 그런데 이 경우에는 잘 못 설정을 한 경우죠. 왜냐면 위와같이 설정할 경우 같은 학과, 같은 학년에는 동일한 이름을 가진 사람이 들어갈수가 없게되므로.. 저의 과에만 해도 동일인물들이 있으니까요.



    primary key를 다시 정리하면 DB에서 primary key로 설정된 필드내에서는 절대 같은 값이 존재할 수 없으며 여러개의 필드를 하나의 primary key로 설정할 수 있고, index로 사용가능합니다.



    Index(색인)는 쉽게 생각해서 책 뒷부분의 주요 단어들의 목록이라고 생각하시면 됩니다.

    즉 거기에는 단어들이 가나다 순으로 되어있고 각 단어가 나와있는 페이지번호가 있습니다. 즉 단어를 찾은 다음 해당 페이지를 넘기면 자료를 금방 찾을 수가 있습니다. 만약 색인이 없다면 책을 앞에서부터 끝까지 순차적으로 찾아야 하게됩니다.

    색인은 검색키 값과 그 값에 해당되는 레코드의 주소가 모여진 일종의 컴퓨터 파일입니다. 만약 위에서 말한 학생관리DB에서 학번이 primary key로 설정된 경우 인덱스 기능을 가지게 되고(인덱스파일이 만들어지고 이 파일에는 학번과 해당 학번이 위치한 레코드의 실제 디스크상의 주소값을 가진 필드 2개만이 존재함) 그 파일에 임의의 값을 넣어 검색을 해보겠습니다. ..가령 학번이 94118035인 학생을 찾는다고 가정을 하면 먼저 인덱스파일에서 94118035 학번을 찾습니다. 그리고 찾은 학번의 실제디스크상의 주소값이 저장된 필드를 값을 읽어서 그 위치로 레코드를 옮기게 됩니다. 색인파일은 학생관리DB보다 크기가 훨씬 작으므로 한꺼번에 주기억장치에 담거나 학생관리DB를 불러오는것보다 디스크접근 횟수가 현저하게 줄어들게 되므로 검색속도가 엄청빨라지겠죠. (제가 알기로는 프로그램상에서 가장 시간이 많이 걸리는 부분이 파일의 읽기, 쓰기라고 들었거든요. 물리적인 움직임이 필요하니까요.)

    물론 위에서 설명한 색인은 밀집색인이라 불리는 방법입니다. 색인하는 방법도 여러가지니까요. 색인에 대한 예를 설명하기 위해 밀집색인방법을 설명을 했습니다.



    단 주의하실점은요. 색인은 꼭 필요한 필드만 설정을 해야합니다. 너무 많이 설정을 하게 되면 교수님 말씀에 속도가 현저하게 줄어든다고 하더군요. 이유는 자료를 입력, 수정, 삭제하는 경우 인덱스파일에 대한 재배치 시간이 늘어나서 그런다고 그러시더군요.



    제나름대로 primary key와 index에 대해 설명을 해드렸는데 이해가 되셨는지 모르겠습니다.

    델파이에서 파라독스로 DB작성시에 primary key는 DB생성시에 '*'로 표시를 하고요 인덱스는 세컨더리 인덱스를 설정합니다.

    DB생성하고 primary key나 세컨더리 인덱스 설정에 대한 내용은 거의 모든 델파이책에 보면 나와 있는것 같습니다. 참조하셨으면 좋겠습니다.

    그리고 위의 글을 읽으시는 많은분들께서 제 설명이 틀렸으면 수정을 해주세요. 저두 배우는 학생이라서 혹 잘못알고 있는 지식을 남에게 전달하는게 아닐까하는 마음에 늘 불안하거든요. 그럼...이만..