테이블로 나누는 까닭
행은 하나의 자료 항목을, 열은 그 항목의 속성을 표현한다. 도서 대출 시스템이라면 책과 대출 내역을 별도 테이블에 두고 책 식별자로 연결할 수 있다. 그러면 책 제목이 바뀔 때 여러 대출 기록에 같은 제목을 반복해서 고칠 필요가 줄어든다.
자료를 나누는 방식은 조회 편의성뿐 아니라 수정할 때 생길 모순에도 영향을 준다. 정규화는 데이터의 종속 관계를 바탕으로 이런 중복과 이상 현상을 줄이려는 설계 방법이다.
키와 제약 조건
기본 키는 테이블의 행을 구별하는 기준이다. 외래 키는 다른 테이블 등의 키를 참조하여 연결의 유효성을 제한할 수 있다. 예를 들어 존재하지 않는 책을 가리키는 대출 기록이 만들어지지 않도록 설계할 수 있다.
제약 조건에는 고유성, 필수 값, 값의 범위 등도 포함된다. 단, 서비스의 모든 업무 규칙을 테이블 제약 하나로 표현할 수 있는 것은 아니므로 응용 프로그램의 검증과 함께 설계한다.
조회에서 이루어지는 결합
조인은 조건에 따라 여러 테이블의 데이터를 결합한다. 필요한 열만 선택하거나 조건에 맞는 행을 추리고, 그룹별 합계를 구하는 작업과 조합할 수 있다.
조회 결과의 순서는 명시적인 정렬 조건 없이 항상 같다고 가정해서는 안 된다. 테이블의 논리적 구조와 저장 장치에 놓이는 물리적 순서도 구분해야 한다.
모델과 구현의 차이
관계형 모델은 데이터를 다루는 논리적 틀이다. 실제 DBMS는 인덱스, 캐시, 실행 계획과 저장 구조를 이용해 질의를 처리한다. 같은 SQL도 자료의 양과 분포, 설계에 따라 실행 비용이 크게 달라질 수 있다.