Skip to content
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

3일차완료 #29

Open
wants to merge 5 commits into
base: 8th
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion seykim/1일차.md
Original file line number Diff line number Diff line change
Expand Up @@ -272,7 +272,7 @@
- 주요 항목
- Server : 서버 소프트웨어 정보
- Accept-Range
- Set-Cookie : 서버측에서 클라이언트에게 세션 쿠기 정보를 설정
- Set-Cookie : 서버측에서 클라이언트에게 세션 쿠키 정보를 설정
- Expires : 리소스의 유효기간
- Age : max-age 시간 내에서 시간이 얼마나 흘렀는지 초단위로 알려주는 캐시 응답
- ETag : HTTP 컨텐츠가 바뀌었는지를 검사할 수 있는 태그
Expand Down
154 changes: 154 additions & 0 deletions seykim/3일차.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,154 @@
# 온보딩 3일차
- [Embedded && Embeddable](#embedded--embeddable)
- [연관 관계 설정](#연관-관계-설정)
- [ERD 작성](#erd-작성)

## Embedded && Embeddable
- 임베디드 타입 : 객체지향 프로그래밍에서 값 타입을 매핑할 때 사용되는 기능, 즉 새로운 값 타입을 직접 정의해서 사용하는 것(CPP에서 struct를 정의하는 것과 비슷한 느낌)

- @Embedded
- 엔티티에서 임베디드 타입의 객체를 포함할 때 사용하는 어노테이션

- 값 타입을 사용하는 곳에 표시

{
@Embedded
public Sample sample;
}

- @Embeddable
- 해당 클래스가 임베디드 타입으로 사용될 수 있음을 표시

- 값 타입을 정의하는 곳에 표시

{
@Embeddable
public class sampleTest {
~~~~
}
}

- 임베디드 타입의 장점
- 객체지향적 설계 : 여러 필드를 하나로 묶어서 사용할 수 있고, 가독성이 좋아 객체지향적 설계에 도움
- 재사용성 : 여러 엔티티에서도 해당 임베디드 타입을 사용할 수 있음
- 중복 코드 감소 : 하나의 객체를 여러 엔티티에 쉽게 포합할 수 있어서 중복된 엔티티를 감소시킴


## 연관 관계 설정
- **PK(Primary Key) : 기본 키**

테이블 내에서 각 행을 고유하게 식별할 수 있는 하나의 컬럼 또는 컬럼들의 조합

하나의 ID역할을 하며, 중복되지 않음

- 특징

- 유일성 : 테이블 내에서 고유함, 즉 중복되지 않음

- NotNULL : 기본 키 컬럼은 NULL값을 가질 수 없음

- 변경을 권장하지 않음 : 고유 식별자로 변경이 권장되지 않음

- 자동 생성 기능 : 자동으로 증가하는 ID값 등등 DB시스템에서 제공

- 복합 키(Composite Key)
- 두 개 이상의 컬럼을 조합하여 하나의 기본 키로 사용할 수 있는 키의 조합

- 예시

CREATE TABLE StudentGrades (
student_id INT, course_id INT,
grade CHAR(1),
PRIMARY KEY (student_id, course_id));
- 위의 테이블에서 student_id + course_id의 조합을 통해서 기본 키로 대체할 수 있음


- **FK(Foreign Key) : 외래 키**

한 테이블에서 다른 테이블의 기본 키를 참조하는 컬럼

두 테이블 간의 관계를 정의하고 데이터의 무결성을 보장함

- 특징

- 참조 무결성 보장 : 참조하는 테이블(부모 테이블)의 기본 키와 일치해야 하고 부모 테이블에는 없는 값을 가질 수 없음 => 데이터 일관성 유지

- NULL 허용 여부 : 부모 테이블의 기본 키와 관계 설정에 따라 NULL을 허용할 수도 있음

- 부모-자식 관계 : 외래 키가 정의된 테이블은 자식 테이블이라고 하며, 외래 키가 참조한 테이블은 부모 테이블이라 함

- 참조 행동 : 부모 테이블에서 데이터가 변경될 때, 자식 테이블의 데이터에 미치는 영향을 설정

- ON DELETE CASCADE : 부모 테이블의 행이 삭제되면 관련 자식 테이블의 행도 함께 삭제

- ON UPDATE CASCADE : 부모 테이블의 기본 키 값이 변경이 되면 자식 테이블의 외래 키 값도 함께 변경

- ### PK와 FK의 차이점

|구분|PK|FK|
|:---|:---|:---|
|목적|고유 식별자|다른 테이블의 기본 키를 참조하여 테이블 간의 관계 정의|
|고유성|고유해야함|중복 가능, 하지만 참조값은 부모 테이블에 반드시 있어야함|
|NULL허용|X|O|
|위치|현재 테이블 내부에서 정의|다른 테이블의 기본 키를 참조하여 현재 테이블에 정의|
|제약 조건|고유한 값|참조 무결성을 유지|

- **연관관계의 주인**
- 외래 키를 가지고 있는 테이블

- 양방향 관계에서 관계를 관리하고 업데이트 할 수 있는 권한을 가진 객체

- 연관관계의 주인이 아닌 경우 읽기 전용으로 동작

- 데이터의 무결성을 유지하고 불필요한 쿼리 생성을 방지하기 위함

- 외래 키가 존재하는 쪽이 연관관계의 주인, 관계를 관리하고 변경해야하는 주체가 주인이 되는것이 좋음

- 이를 잘못 설정할 경우 데이터베이스에 적용이 되지 않는 문제가 발생할 수 있음

- **@OneToOne**
- 일대일 관계 : 하나의 엔티티이 다른 테이블의 하나의 엔티티과 연결된 경우

- 주로 두 테이블을 분리하여 저장할 필요가 있을 때 사용

<img width="571" alt="스크린샷 2024-11-13 오후 4 36 39" src="https://github.com/user-attachments/assets/c196ee48-8a75-4af0-812d-95356ac4ff69">

- **@OneToMany**
- 일대다 관계 : 하나의 엔티티가 여러 엔티티와 매칭되는 관계, 즉 하나의 부모 엔티티가 여러 자식 엔티티를 가질 수 있는 구조

<img width="729" alt="스크린샷 2024-11-13 오후 4 39 34" src="https://github.com/user-attachments/assets/8326c25e-2699-4147-961b-d1d454707177">

- **@ManyToOne**
- 다대일 관계 : 여러 개의 엔티티가 하나의 엔티티와 매칭되는 관계로 OneToMany와 반대 방향

<img width="670" alt="스크린샷 2024-11-13 오후 4 47 31" src="https://github.com/user-attachments/assets/4a29ec10-8769-466e-84fe-10b2774dad33">


- **@ManyToMany**
- 다대다 관계 : 여러 엔티티가 여러 엔티티와 매칭되는 관계

<img width="746" alt="스크린샷 2024-11-13 오후 4 50 58" src="https://github.com/user-attachments/assets/6cc4918b-6559-41ba-8759-b68695de3364">

- 중간 테이블 : 다대다 관계에서 두개의 1대 다 관계로 분해하여 데이터의 중복을 줄이는 방식

<img width="944" alt="스크린샷 2024-11-13 오후 4 33 41" src="https://github.com/user-attachments/assets/fa5c8f65-c134-4f99-a2e5-8a2bdf6084df">

- 단점
1. 데이터 중복과 무결성 문제 : 중복 데이터 가능성 및 무결성 제약의 복잡성
2. 데이터 처리와 성능 문제 : Join 비용 증가 및 복잡한 쿼리
3. 관계 관리의 어려움 : 삭제 및 갱신이 어렵고, 관계 정보 확장성이 제한 됨
4. 데이터 모델의 비직관성 : 데이터 모델이 복잡하고, 요구사항의 표현력이 떨어짐

## ERD 작성
- 아래의 내용을 기반으로 ERD 작성하기

1. 학생들이 수강신청을 하는 홈페이지를 만들 예정입니다.

2. 학생은 이름과 생년월일을 필수로 가지고 있습니다.

3. 강의는 교수명, 강의이름, 현재 신청인원을 필수로 가지고 있습니다.

4. 강의를 신청하려면 학생 이름과 생년월일을 입력해야합니다.


<img width="944" alt="스크린샷 2024-11-13 오후 4 33 41" src="https://github.com/user-attachments/assets/fa5c8f65-c134-4f99-a2e5-8a2bdf6084df">
Loading