데이터베이스를 잘 사용하려면 필히 거쳐가야 하는 관문이 데이터베이스 분석과 설계 과정입니다. 보통 데이터베이스 모 델링이라고도 하는데, 관계형 데이터베이스에서는 각 테이블과의 관계를 얼마나 잘 설정을 하고, 필드(컬럼)에 어떤 데이 터를 넣고, 테이블은 어떻게 구성하느냐에 따라 데이터베이스의 성능이 크게 좌우되기 때문에, 이 부분을 꼭 익혀 놓아야 나중에 테이블을 다시 뜯어고치게 되는 불상사를 막을 수 있습니다.
우선 데이터베이스를 사용하는 데 있어서 중요한 용어 몇가지를 알아보도록 하겠습니다.
테이블(Table)
행과 열로 구성된 표 형태로 된 데이터를 의미합니다. 엑셀도 표 형태를 취하고 있으나 엑셀과 다른 점은 엑셀의 경우 여러 행에 걸쳐 데이터를 넣거나, 여러 열에 한가지 데이터를 넣는 등, 표 형태를 구성하는 데 제약이 없으나 데이터베이스를 구 성하는 테이블에서의 행과 열은 하나의 열에 하나의 데이터만 넣을 수 있다는 점이 다른 점입니다.
열(Column)
테이블을 구성하는 개별 요소들입니다. 회원 테이블이 있다면 회원의 주소, 회원 이름, 아이디, 성별 등이 열을 구성하는 요소입니다. 테이블에서 각 열은 고유해야 하고 중복된 이름이 들어가서는 안됩니다.
행(Row)
실제 데이터가 들어가는 부분입니다. 하나의 테이블에 모든 열을 포함하는 한 행의 데이터가 레코드를 구성하는 부분이 됩 니다.
한 테이블의 레코드가 다른 테이블의 레코드와 어떤 관계가 있는지를 알아야 하기 때문에 레코드는 테이블간의 관계를 이 해하는데 아주 중요한 핵심 요소입니다.
기본키(Primary Key)
각 행을 구분하는 유일한 열을 정의할 때 사용되는 부분입니다. 예를 들어 회원 테이블이 있다면 회원의 주소나 회원 이름 은 기본키로 적당하지 않습니다. 그 이유는 유일한 열이 되기 힘들기 때문입니다. 회원의 주소는 가족의 경우 같은 주소를 쓰고 있고, 회원의 이름도 동명이인이 얼마든지 있을 수 있기 때문입니다.
인터넷에서 회원 가입을 할때 제일 먼저 아이디를 생성해야 하는데, 이 아이디를 생성할 때 중복된 아이디가 있는 지를 검 사하는 과정을 거치는데, 이 검사 과정이 필요한 이유가 회원의 아이디를 기본키로 사용하기 위해서 중복되지 않은 유일한 열이 필요하기 때문입니다.
뷰(View)
뷰는 데이터베이스에서 하나 혹은 그 이상의 테이블 열로 구성된 가상 테이블입니다. 뷰는 실제 데이터를 저장하는 곳이 아니라 테이블의 정보를 취합하거나 필터링을 해서 필요한 데이터만 보기를 원할때 사용할 수 있습니다.
예를 들어 테이블에 있는 정보중에서 민감한 정보를 숨기고 싶을 때(예를 들어 각 사원들의 연봉) 이런 정보를 제외하고 뷰를 통해서 작업을 할 수 있도록 유연한 방식으로 대처할 수 있습니다.
일대일 관계(One-to-One)
일대일 관계는 첫번째 테이블의 단일 레코드가 두번째 테이블의 하나의 레코드와 관련이 되어 있고, 두번째 테이블의 단일 레코드가 첫번째 테이블의 레코드 하나와만 관련이 있을 경우 사용됩니다.
예를 들어 어느 기업의 마케팅 부서에서 방대한 고객의 정보를 가지고 있다고 하겠습니다. 그런데 이 정보를 하나의 테이 블에 담기는 힘들 경우, 또는 테이블에 나누어서 보관해야 할 필요성이 있을 경우 고객의 정보를 분리해서 여러 테이블에 담을 수가 있습니다.
하나의 테이블에는 고객의 신체에 관련된 정보를 저장하고, 또 하나의 테이블에는 고객의 재무에 관한 정보를 저장하고, 또 하나의 테이블에는 고객의 사회관계망과 관련된 정보를 저장할 수 있습니다.
그래서 고객의 신체에 관한 정보는 백화점에 사용할 수 있도록 하고, 재무에 관한 정보는 은행에서 사용할 수 있도록 하는 방법을 생각해 볼 수 있습니다. 이럴 경우 각 테이블의 관계는 1:1 관계가 형성된다고 할 수 있습니다.
이렇게 보면 알 수 있듯이 1:1 관계는 그렇게 많이 사용하는 기능은 아닙니다. 방대한 자료를 다루는 기업에서 필요에 따라 사용되는 기능입니다.
일대다 관계(One-to-Many)
첫번째 테이블의 단일 레코드가 두번째 테이블의 많은 레코드와 관련이 있을때 일대다 관계라고 합니다. 이 경우 두번째 테이블의 단일 레코드는 첫번째 테이블의 한 레코드에만 연관될 수 있습니다. 이 관계는 첫번째 테이블은 기본키를 가지게 되고, 두번째 테이블은 외래키를 가지게 됩니다. 데이터베이스의 관계에서 가장 많이 사용되는 관계이고 각 테이블들의 연 결을 위해서 필수적으로 사용되어야 하는 기능입니다.
예를 들어 회원 테이블의 각 회원들은 쇼핑몰에서 많은 주문을 할 수 있습니다. 기업체에서 기업들은 한 고객에게 많은 판 매를 할 수 있습니다. 영화배우는 많은 영화에 출연할 수 있습니다. 이런 관계는 모두 일대다의 관계라고 할 수 있습니다. 일대다 관계의 경우는 테이블에서 가장 많이 사용되는 기능이기 때문에 그림을 통해 좀 더 설명하도록 하겠습니다. 아래의 그림을 보면 고객(Customers)은 주문(Orders)과 일대다의 관계를 맺고 있습니다.
각 고객들은 여러번의 주문이 있을 수 있고, 각 주문들은 Customers의 단일 고객만 연결될 수 있습니다. 하나의 주문에 여러 고객이 연결될 수 없기 때문에 Orders의 CustomerID는 Customers 테이블의 CustomerID에 대하여 외래키의 관계를 맺고 있는 경우입니다.
실제 데이터의 예를 한번 보도록 하겠습니다.
아래의 표 그림을 보면 Customers 테이블의 CustomerID는 Orders 테이블의 CustomerID와 일대다의 관계를 맺고 있 습니다.
Customers 테이블에서 각 고객들은 한번의 주문 혹은 그 이상의 주문이 이루어질 수 있으므로 Customers 테이블과 Orders 테이블은 일대다의 관계를 맺어야 하며 Customers 테이블의 CustomerID가 기본키 Orders테이블의 CustomerID는 외래키에 해당되게 됩니다.
다대다 관계(Many-to-Many)
다대다 관계는 첫번째 테이블의 단일 레코드가 두번째 테이블의 많은 레코드와 관련될 수 있고, 두번째 테이블의 단일 레 코드가 첫번째 테이블의 여러 레코드와 관련이 있는 경우입니다. 다대다 관계는 테이블을 구성할 때 사용할 수는 있지만 되도록이면 사용하지 않는 것이 좋습니다. 아니 거의 절대적으로 피하는 것이 좋습니다. 이유는 다대다 관계를 사용하면 필연적으로 데이터의 무결성을 위반하게 되며, 데이터의 삭제와 추가, 수정을 할 때 많은 문제가 발생하기 때문입니다. 예를 들어 학생과 선생의 관계는 다대다 관계라고 할 수 있습니다. 한명의 학생은 여러 선생에게 수업을 들을 수 있고, 한 명의 선생은 여러 학생을 가르치기 때문입니다. 이렇게 다대다 관계에서 학생과 선생을 서로 연결해서 수업의 시작일과 종료일을 기록해야 한다고 해보겠습니다.
이 경우 수업의 시작일과 종료일을 학생 테이블에 넣을 지, 아니면 선생 테이블에 넣을 지 혼돈이 발생하게 됩니다. 어느 테이블에 넣더라도 데이터의 무결성을 해치게 되고, 위에서 언급했듯이 데이터를 수정해야 할 경우에도 많은 문제가 발생 하게 됩니다.
제대로 설정되지 않은 다대다 관계는 해결되지 않는 문제를 발생시키게 됩니다. 그렇기 때문에 다대다 관계는 거의 사용되 지 않고 이런 문제를 해결하는 방법은 연결 테이블을 만들어서 해결하는 것이 좋습니다.
데이터베이스를 설계할 때 초보자분들이 가장 실수하기 쉬운 부분이기도 한데, 이런 다대다 문제를 해결하는 연결 테이블 을 사용하는 방법에 대해 아래의 그림에서 보여드리도록 하겠습니다.
위의 표 그림을 보면 연결 테이블을 생성했다는 것을 알 수 있습니다. 학생 테이블과 교수 테이블이 모두 참조 무결성을 전 혀 위반하고 있지도 않습니다.
교수 테이블과 연결 테이블은 1:다 관계입니다. 학생 테이블과 연결 테이블도 1:다 관계입니다.
참조 무결성을 위반하지도 않고, 다대다 관계를 그대로 유지하면서 연결 테이블을 하나를 만들어 놓음으로써 다대다 관계 로 인해서 발생할 수 있는 문제를 완벽하게 해결해 놓았고, 이렇게 연결 테이블을 생성해 놓았기 때문에 데이터의 추가, 수 정, 삭제에 아무런 문제가 발생하지 않는 다는 것을 확인하실 수 있을 겁니다.
예를 들어 김창선 교수가 수업을 시작하게 되어 연결 테이블에 수업의 시작일과 종료일을 기록해 놓았다고 해봅시다. 그런 데 그 수업이 예기치 않은 사정으로 중지가 되었습니다. 그러면 연결 테이블에서 해당 수업에 대한 레코드를 삭제만 하면 됩니다. 이럴 경우 학생 테이블과 교수 테이블은 아무런 영향을 미치지 않게 되고, 데이터의 수정이나 삭제시 아무런 문제 가 발생하지 않습니다.
다대다 관계는 실제로 현업에서 상당히 많이 발생하게 됩니다. 온라인 서점에서 고객과 책의 경우 한명의 고객이 여러 책 을 주문할 수 있고 하나의 책은 여러명에게 판매가 됩니다. 쇼핑몰에서도 한명의 고객은 여러 상품을 구매하게 되고, 하나 의 상품은 또 여러 고객에게 판매가 됩니다. 이럴 경우 고객과 상품은 직접 연결을 하지 않고 위와 같이 연결 테이블을 통 해서 1:다의 관계를 유지하면서 데이터의 무결성을 해치지 않도록 설계를 하는 것이 좋습니다.
'MSSQL' 카테고리의 다른 글
데이터 검색(여러 조건) (0) | 2024.11.12 |
---|---|
데이터 검색(WHERE) (2) | 2024.11.11 |
데이터 선택(SELECT...FROM) (1) | 2024.11.09 |
제약조건 (0) | 2024.11.09 |
데이터베이스 생성과 테이블 작업 (0) | 2024.11.08 |