Environment & Database (3) - Relational Database
2021. 5. 16. 17:34ㆍ[AI]/Data Engineering
New Stuff
Key Points
- Relational Database
- Relational Database Types
- Schema Design
- Database Normalization
Learned Stuff
[Relational Database]
- Table 로 이루어진 데이터를 의미
- Key 와 Value의 관계로 나타남
Keywords
- Field (or Column) : Table 의 열
- Record (or Tuple) : Table 의 한 행에 저장된 정보
- Key : Table 의 각 Record를 구분할 수 있느 값 (보통 ID 로 나타남)
- Primary Key : 고유값
- Foreign Key : 다른 Table 의 고유값을 참조하는 값
Relational Database Types
- 1:1 Relationship
- 아이돌 그룹 이름이 담겨 있는 Idol_Group Table 과 그룹의 리더의 이름이 담겨 있는 Leader_of_Idol_Group Table을 예시로 들겠습니다.
- 하나의 아이돌 그룹 당 리더의 이름을 나타내는 정보는 하나이고 그 반대도 동일하므로 1 대 1 관계를 가집니다.
Diagram
- 1:N Relationship
- 가수의 이름이 담겨 있는 Artist Table 과 노래 이름이 담겨있는 Songs Table을 예시로 들겠습니다.
- 가수(또는 그룹/밴드) 한 명 당 여러 개의 노래 리스트를 가질 수 있으므로 1 대 다 관계를 가집니다.
Diagram
- N:N Relationship
- 가수의 이름이 담겨 있는 Artist Table & 장르가 담겨 있는 Genre Table & 노래 이름이 담겨있는 Songs Table을 예시로 들겠습니다.
- 가수(또는 그룹/밴드) 한 명 당 여러 개의 노래 리스트를 가질 수 있고 노래마다 장르가 다양하므로 Artist Table 과 Genre Table을 묶을 수 있습니다.
- Songs Table은 두 개 Table을 Join 한 형태입니다.
Diagram
- Self Referencing Relationship
- 추천인과 추천 받는 사람에 관한 정보가 담겨 있는 Recommender Table을 예시로 들겠습니다.
- Recommender_ID : 추천인 ID 정보
- User_ID : 추천 받은 사람 ID 정보
- 같은 Table의 Column 정보를 참조합니다.
- 추천 받은 사람이 여러 명일 수 있으므로 1 : N 관계를 가진다고 볼 수 있습니다.
Diagram
Schema Design
- Database 의 Schema Design의 예시는 아래 그림과 같습니다.
Bibliography : [https://www.sqlitetutorial.net/sqlite-sample-database/]
Database Normalization
- Relational Database 설계 시 중복 (Redundancy)을 최소화하는 프로세스
Forms
- First Normal Form (1NF)
- Table 에서 중복 Columns 및 중복 Rows (Record) 을 제거합니다.
- Table에서의 Rows는 Unique 해야 합니다.
- Table Cell 은 Single Value 여야 합니다.
- Column 에 들어가는 Data Type 은 동일해야 합니다.
- Ex) INT 형 Column 에는 INT 형 Data만 들어가야 합니다.
- 관련된 데이터 집합에 대해 별도의 Table 을 만듭니다.
- 이 때 Primary Key & Foreign Key 를 설정해줍니다.
- Second Normal Form (2NF)
- 1NF을 만족해야 함
- Partial Dependent Columns 제거하기
- Partial Dependent Columns : Composite Key로 이루어진 Columns 중 일부분에 의해 영향을 받는 Columns
- Composite Key : 2 개 이상의 Primary Key로 Column 이 이루어진 경우 Composite Key 라고 함
- Partial Dependent Columns : Composite Key로 이루어진 Columns 중 일부분에 의해 영향을 받는 Columns
Example
- Score Table
- Score_ID : 점수를 나타내는 ID (Primary Key)
- Student_ID : 학생을 나타내는 ID (Composite Primary Key)
- Class_ID : 수업을 나타내는 ID (Composite Primary Key)
- Score : 시험 점수
- Teacher_NAME : 수업을 가르치는 선생님의 이름
Analysis
- Class_ID Column 의 데이터 값의 변화에 따라 Teacher_NAME Column 에도 영향을 주는 것을 알 수 있습니다.
- Class_ID 는 Composite Key 중 하나이므로 Teacher_NAME Column 은 Partial Dependent Column 입니다.
- 즉, 이 두 Column 은 같은 것을 의미합니다.
- Redundancy 문제가 발생하므로 이를 해결하기 위해서는 아래 그림과 같이 별도의 Table을 만들어 주어야 합니다.
- Teacher_NAME Column 삭제하기
- Class Table 만들고 Teacher_NAME Column 추가하기
- Third Normal Form (3NF)
- 2NF을 만족해야 함
- Transitive Dependent Columns 제거하기
- Transitive Dependent Columns : Composite Key 를 제외한 나머지 Column 들 중 서로 영향을 주는 Columns
Example
- Score Table
- Score_ID : 점수를 나타내는 ID (Primary Key)
- Student_ID : 학생을 나타내는 ID (Composite Primary Key)
- Score : 시험 점수
- Exam_Name : 시험 과목 이름
- Total_Marks : 시험 총점시험 총점
Analysis
- Exam_Name Column 의 데이터 값의 변화에 따라 Total_Marks Column 에도 영향을 주는 것을 알 수 있습니다.
- Exam_Name 과 Total_Marks 는 Composite Key 가 아니므로 Total_Marks Column 은 Transitive Dependent Column 입니다.
- 즉, 이 두 Column 은 같은 것을 의미합니다.
- Redundancy 문제가 발생하므로 이를 해결하기 위해서는 아래 그림과 같이 별도의 Table을 만들어 주어야 합니다.
- Total_Marks Column 삭제하기
- Exam Table 만들고 Total_Marks Column 추가하기
Conclusion
- 1NF , 2NF , 3NF 뿐만 아니라 4NF 와 5NF 도 있습니다.
- 보통 1NF , 2NF , 3NF 으로 Database Normalization 을 진행하므로 4NF 와 5NF 에 관한 설명은 하지 않겠습니다.
728x90
'[AI] > Data Engineering' 카테고리의 다른 글
Environment & Database (1) - Virtual Environment & Git / Github (1) | 2021.05.16 |
---|---|
Environment & Database (2) - Docker (0) | 2021.05.16 |
Environment & Database (4) - SQL Property & Syntax (0) | 2021.05.16 |
Environment & Database (5) - Further SQL & NoSQL Database (0) | 2021.05.16 |
Environment & Database (6) - Cloud Database / MongoDB (0) | 2021.05.16 |