sm 개발
2007-05-28 16:28:12
3
9538

식별관계 , 비식별관계


식별관계로 관계를 맺으면 부모테이블의 pk 가 자식테이블의 pk로 잡히고 비식별관계로 맺으면 자식테이블의 일반속성으로 fk 로 잡히는걸로알고있는데  어떨때 식별, 비식별구분을해서 맺어주는지 궁금합니다.
0
  • 답변 3

  • 글세요
    2007-05-28 16:46:04
    식별관계냐 비식별관계냐는 erd를 작성하는 사람의 판단에 따른다고 생각합니다.

    자식테이블의 pk를 구성하는 칼럼이 부모로부터 받는 거라면 식별이고
    그렇지 않고 단순한 데이타 저장용 칼럼이라면 비식별 관계가 되겠지요.

    이때 부모로 부터 받은 칼럼을 일반 칼럼으로 잡을 수도 있지만 pk로도 잡을 수 있는 애매한 상황등이 존재하는데 pk칼럼을 구성하는 원칙중 최소한의 원칙이란 것이 있습니다.
    즉 자식테이블의 pk를 구성하는 칼럼이 col1,col2,col3,col4 4개가 있고 col4는 부모로부터 받은 칼럼입니다. 그런데 자식테이블 로우의 유일성을 구분할 수 있는 것이 col1,col2,col3만으로도 충분하다면 col4는 pk 구성에서 빠져야 합니다. 그렇다면 처음에는 식별관계였다가 이후 비식별관계가 되겠지요.

    간단히 설명드렸는데 데이타베이스의 설계는 1+2=3 이다 이런식으로 수학공식처럼 딱 떨어지지 않는 부분이 많습니다. 상당히 인문학적인 요소가 들어간다고 할까요?
    사실 개판으로 erd를 만들어도 프로그래머가 고생하고 엄청나게 비효율적인 프로그램이 만들어지고 유지보수가 어려울 뿐이지 프로그램이 안돌아가는 것은 아닙니다. 다만 훌륭하게 erd가 만들어지면 프로그램 소스가 깔끔하게 나오고 유지보수도 쉬어지면 그만큼 효율적인 시스템이 되겠지요.

    장황하게 말씀드렸는데 결론은 erd작성에는 정답이 별로 없다라는 것입니다. 자신의 그동안의 경험에 의해 이렇게 하면 좋더라, 저렇게 했더니 프로그램이 걸레되더라 는 등 상당부분 자신의 경험을 바탕으로 해서 제각각 만들어지게 됩니다.
    (물론 이화식님처럼 누구나 이렇게 데이타베이스를 설계해야 한다는 것을 공감하게 할 수 있는 절대적인 원칙이 있다라고 강조하시는 분도 계시지만 그 정도 내공에 이르기에는-모든 이들이 공감할 수 있는 수준의 설계를 한다는 것은 정말 힘들겠죠.)

    보다 과학적이고 효율적인 데이타베이스 설계를 하고 싶다면 책을 사서 보시기 바랍니다. 프로그램을 하는데 있는 새로운 시각을 가지게 될 것입니다.
  • 유지보수
    2007-05-28 17:59:15
    저도 많이 헷갈린 건대..알고 나니 말이 어렵더군요.
    식별관계는
    부모 테이블이 PK가 자식 테이블 PK가 돼는거죠..
    한마디로 1:1 상황입니다.
  • 유지보수
    2007-05-28 18:00:13
    경우에 따라서 부보 PK 자삭 테이블 PK가 돼면서도
    1:1 관계가 아닐때도 잇습니다..
    자식 테이블 PK가 여러개일때요..
  • 로그인을 하시면 답변 을 등록할 수 있습니다.