-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[ohii] Chapter04_DATABASE 설계 & AWS RDS 설정 #15
Merged
Changes from all commits
Commits
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,97 @@ | ||
[외래키] | ||
-두 개의 데이터베이스 테이블을 잇고자 기본키와 함께 사용된다. 데이터가 일관될 수 있도록 돕는 역할!! | ||
[외래키 특징] | ||
-다른 테이블의 기본키를 참조해 외래키로 사용 | ||
-외래키를 가지고 있는 테이블 : 하위 테이블 | ||
-외래키와 기본키는 1:1관계로 매칭 | ||
-기본키에 존재하지 않는 값이 외래키에 존재할 수 없음 | ||
-NULL값 가능, 중복값 가능 | ||
|
||
[기본키] | ||
-데이터베이스 테이블 내의 모든 레코드에서 고유한 아이디 | ||
[기본키 특징] | ||
-NULL값 x | ||
-중복되는 값 x, 모든 레코드가 서로 다른 값을 가지고 있어야 각 레코드를 식별할 수 있음! | ||
-테이블 당 하나의 기본키를 가짐 | ||
-기본키를 가지고 있는 테이블: 참조 테이블, 상위 테이블 | ||
-유일성(중복x)과 최소성(꼭 필요한 최소한의 속성들로만 키를 구성)을 가짐 | ||
|
||
[ER 다이어그램] | ||
-데이터베이스 구조를 한눈에 알아보기 위해 그리는 다이어그램 | ||
-개체, 속성, 관계로 구성 | ||
-개체: 데이터베이스 설계 시, 테이블. 단독으로 존재하는 객체. 사각형으로 표시. | ||
-속성: 개체가 가지는 속성. 원으로 표시. 속성 중 기본키는 밑줄. | ||
-관계성: 개체간의 관계. | ||
|
||
[복합 키] | ||
-두 개 이상의 컬럼을 기본키를 구성한 것 | ||
-테이블 당 하나의 기본키를 가지지만, 두 개 이상은 컬럼을 하나의 기본키로 생성할 수 있음 | ||
-하나의 컬럼만으로는 기본키의 역할을 하지 못할 때 사용 | ||
|
||
|
||
[연관관계] | ||
<1:1> | ||
-1대1로 매칭되는 관계 | ||
-주 테이블이나 대상 테이블 중 외래키 선택 가능 | ||
-외래키가 있는 쪽이 연관관계 주인 | ||
-ex)학생-사물함 | ||
|
||
<1:N> | ||
-1대다수로 매칭되는 관계 | ||
-항상 다(N)쪽에 외래키가 있음 | ||
|
||
<N:1> | ||
-다수대1로 매칭되는 관계 | ||
-외래키가 있는 쪽이 연관관계의 주인 | ||
|
||
<N:M> | ||
-다수 대 다수로 매칭되는 관계 | ||
-두 엔티티를 1:N, N:1로 조정하는 작업이 필요!! -> 중간에 다른 엔티티 필요 | ||
-중간 엔티티가 두 엔티티의 고유 속성 역할을 담당->매핑 테이블, 조인 테이블 | ||
-ex)학생-강의 -> 학생-학생_강의(1:N), 학생_강의-강의(N:1) | ||
|
||
[정규화] | ||
-테이블 간의 중복된 데이터를 허용하지 않는 것-> 무결성 유지 | ||
-데이터 베이스 변경 시 이상현상(테이블을 잘못 설계해서 데이터 삽입, 삭제, 수정 시 논리적으로 생기는 오류) 제거 | ||
-다만 JOIN 연산이 많아져 성능 저하, 응답 시간이 느려질 수도 있음 | ||
|
||
<제1정규화> | ||
-테이블의 칼럼이 원자값(하나의 값)을 갖도록 테이블 분해 | ||
-각 칼럼이 하나의 속성만 가지도록 분리 | ||
-하나의 칼럼은 같은 타입가져야 함 | ||
-각 칼럼은 유일한 이름을 가짐 | ||
-칼럼의 순서는 상관없어야 함 | ||
|
||
<제2정규화> | ||
-제1정규화를 만족하는 테이블에 대해 완전 함수 종속을 마족하도록 테이블을 분해 | ||
-완전 함수 종속 : 기본키의 부분집합이 결정자가 되어선 안된다 | ||
|
||
<제3정규화> | ||
-제2정규화를 만족하는 테이블에 대해 이행적 종속을 없애도록 분해 | ||
-이행적 종속 : A->B, B->C를 만족할 때, A->C가 성립되는 것 | ||
-기본키를 제외한 속성들 간의 이행 종속성이 없어야 함 | ||
|
||
<BCNF 정규화> | ||
-제3정규화를 만족하는 테이블에 대해서 모든 결정자가 후보키 집합에 속하도록 하는 것 | ||
|
||
[반 정규화] | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 반 정규화에서 테이블과 속성 이렇게 구분해서 설명해주신 부분이 좋네요! |
||
-데이터베이스의 성능 향상을 위해 데이터 중복을 허용하고 join을 줄이는 것 | ||
-조회 속도는 향상, 모델의 유연성은 낮아짐 | ||
-정규화로 인해 성능이 저하되었을 때 사용 | ||
|
||
<테이블 반정규화> | ||
-테이블 병합 : 1:1, 1:N, 슈버/서브타입 테이블 병합 | ||
-테이블 분할 : 수직 분할(속성을 분할해서), 수평 분할(값을 기준으로) | ||
-테이블 추가: | ||
동일한 테이블 중복하여 원격조인 제거 | ||
SUM, AVG 등을 미리 수행하여 계산 | ||
자주 조회되는 레코드를 중복하여 테이블 추가 | ||
자주 이용하는 칼럼을 모아놓은 별도의 테이블 추가 | ||
<속성 반정규화> | ||
-중복 칼럼 추가: 중복된 칼럼을 추가하여 조인 감소 | ||
-파생 칼럼 추가: 미리 값을 계산 | ||
-이력 테이블 칼럼 추가: 기능성 칼럼(최근값 여부, 시작/종료일자) 추가 | ||
-pk에 의한 칼럼 추가: 인공키를 pk로 지정하여 단순성 | ||
-응용시스템 오작동을 위한 칼럼 추가: 이전 데이터를 임시적으로 중복 보관 | ||
<관계 반정규화> | ||
-중복관계추가: 성능 저하 방지를 위해 추가적인 관계 맺음 |
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
정규화에 대해서 자세히 설명해주셔서 좋았습니다!