diff --git a/docs/chapter4/Ch04keyword.txt b/docs/chapter4/Ch04keyword.txt new file mode 100644 index 0000000..edb08d1 --- /dev/null +++ b/docs/chapter4/Ch04keyword.txt @@ -0,0 +1,97 @@ +[외래키] +-두 개의 데이터베이스 테이블을 잇고자 기본키와 함께 사용된다. 데이터가 일관될 수 있도록 돕는 역할!! +[외래키 특징] +-다른 테이블의 기본키를 참조해 외래키로 사용 +-외래키를 가지고 있는 테이블 : 하위 테이블 +-외래키와 기본키는 1:1관계로 매칭 +-기본키에 존재하지 않는 값이 외래키에 존재할 수 없음 +-NULL값 가능, 중복값 가능 + +[기본키] +-데이터베이스 테이블 내의 모든 레코드에서 고유한 아이디 +[기본키 특징] +-NULL값 x +-중복되는 값 x, 모든 레코드가 서로 다른 값을 가지고 있어야 각 레코드를 식별할 수 있음! +-테이블 당 하나의 기본키를 가짐 +-기본키를 가지고 있는 테이블: 참조 테이블, 상위 테이블 +-유일성(중복x)과 최소성(꼭 필요한 최소한의 속성들로만 키를 구성)을 가짐 + +[ER 다이어그램] +-데이터베이스 구조를 한눈에 알아보기 위해 그리는 다이어그램 +-개체, 속성, 관계로 구성 +-개체: 데이터베이스 설계 시, 테이블. 단독으로 존재하는 객체. 사각형으로 표시. +-속성: 개체가 가지는 속성. 원으로 표시. 속성 중 기본키는 밑줄. +-관계성: 개체간의 관계. + +[복합 키] +-두 개 이상의 컬럼을 기본키를 구성한 것 +-테이블 당 하나의 기본키를 가지지만, 두 개 이상은 컬럼을 하나의 기본키로 생성할 수 있음 +-하나의 컬럼만으로는 기본키의 역할을 하지 못할 때 사용 + + +[연관관계] +<1:1> +-1대1로 매칭되는 관계 +-주 테이블이나 대상 테이블 중 외래키 선택 가능 +-외래키가 있는 쪽이 연관관계 주인 +-ex)학생-사물함 + +<1:N> +-1대다수로 매칭되는 관계 +-항상 다(N)쪽에 외래키가 있음 + + +-다수대1로 매칭되는 관계 +-외래키가 있는 쪽이 연관관계의 주인 + + +-다수 대 다수로 매칭되는 관계 +-두 엔티티를 1:N, N:1로 조정하는 작업이 필요!! -> 중간에 다른 엔티티 필요 +-중간 엔티티가 두 엔티티의 고유 속성 역할을 담당->매핑 테이블, 조인 테이블 +-ex)학생-강의 -> 학생-학생_강의(1:N), 학생_강의-강의(N:1) + +[정규화] +-테이블 간의 중복된 데이터를 허용하지 않는 것-> 무결성 유지 +-데이터 베이스 변경 시 이상현상(테이블을 잘못 설계해서 데이터 삽입, 삭제, 수정 시 논리적으로 생기는 오류) 제거 +-다만 JOIN 연산이 많아져 성능 저하, 응답 시간이 느려질 수도 있음 + +<제1정규화> +-테이블의 칼럼이 원자값(하나의 값)을 갖도록 테이블 분해 +-각 칼럼이 하나의 속성만 가지도록 분리 +-하나의 칼럼은 같은 타입가져야 함 +-각 칼럼은 유일한 이름을 가짐 +-칼럼의 순서는 상관없어야 함 + +<제2정규화> +-제1정규화를 만족하는 테이블에 대해 완전 함수 종속을 마족하도록 테이블을 분해 +-완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안된다 + +<제3정규화> +-제2정규화를 만족하는 테이블에 대해 이행적 종속을 없애도록 분해 +-이행적 종속 : A->B, B->C를 만족할 때, A->C가 성립되는 것 +-기본키를 제외한 속성들 간의 이행 종속성이 없어야 함 + + +-제3정규화를 만족하는 테이블에 대해서 모든 결정자가 후보키 집합에 속하도록 하는 것 + +[반 정규화] +-데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 join을 줄이는 것 +-조회 속도는 향상, 모델의 유연성은 낮아짐 +-정규화로 인해 성능이 저하되었을 때 사용 + +<테이블 반정규화> +-테이블 병합 : 1:1, 1:N, 슈버/서브타입 테이블 병합 +-테이블 분할 : 수직 분할(속성을 분할해서), 수평 분할(값을 기준으로) +-테이블 추가: + 동일한 테이블 중복하여 원격조인 제거 + SUM, AVG 등을 미리 수행하여 계산 + 자주 조회되는 레코드를 중복하여 테이블 추가 + 자주 이용하는 칼럼을 모아놓은 별도의 테이블 추가 +<속성 반정규화> +-중복 칼럼 추가: 중복된 칼럼을 추가하여 조인 감소 +-파생 칼럼 추가: 미리 값을 계산 +-이력 테이블 칼럼 추가: 기능성 칼럼(최근값 여부, 시작/종료일자) 추가 +-pk에 의한 칼럼 추가: 인공키를 pk로 지정하여 단순성 +-응용시스템 오작동을 위한 칼럼 추가: 이전 데이터를 임시적으로 중복 보관 +<관계 반정규화> +-중복관계추가: 성능 저하 방지를 위해 추가적인 관계 맺음