-
Relationship(관계)(1:1, 1:다, 다:다)(데이터베이스 응용)[포스코x코딩온] 웹개발자 풀스택 부트캠프8기 2023. 8. 11. 19:37728x90
Relationship
- 테이블들은 서로 관계를 맺을 수 있으며, 이를 통해 복잡한 데이터 구조를 단순화하고 관리
- 두 개 이상의 개체 사이 또는 속성 간의 상호 연관성
- 관계의 종류
- 1:1(일대일)
- 1:n(일대다)
- n:m(다대다)
1:1 (일대일)
- 하나의 레코드가 다른 하나의 레코드와 관련되어 있는 관계
- 두 개체 간의 구성 원소가 각각 하나씩 대응되는 경우
- 이 관계에서 각 레코드는 서로 한 가지 정보만을 경우
- ex
- 사용자와 프로필
- 직원과 연차
- 주문과 송장
CREATE TABLE user( id INT PRIMARY KEY AUTO_INCREMENT, username VARCHAR(50) NOT NULL, email VARCHAR(100) NOT NULL, password VARCHAR(100) NOT NULL ); CREATE TABLE profile( id INT PRIMARY KEY, user_id INT, introduce VARCHAR(100), FOREIGN KEY (user_id) REFERENCES user(id) );
User.hasOne(Profile, { foreignKey: 'user_id', onDelete: 'CASCADE'}); Profile.belongsTo(User, { foreignKey: 'user_id', onDelete: 'CASCADE'});
- hasOne: 한 모델이 다른 모델을 가리키는 1:1 관계를 설정하는 데 사용
- belongsTo: 다른 모델이 한 모델을 가리키는 1:1(1:다) 관계를 설정하는 데 사용
1:n(일대다)
- 한 쪽 레코드가 다른 쪽 레코드 여러 개와 관련되어 있는 관계
- 두 개체 간의 구성 원소 중 하나의 원소와 여러 개의 원소가 대응되는 경우
- 보통 부모 엔티티와 자식 엔티티 사이의 관계를 나타내는 데 사용
- ex
- 부서와 직원
- 고객과 주문
- 학교와 학생
CREATE TABLE customers( customer_id INT PRIMARY KET AUTO_INCREMENT, customer_name VARCHAR(255), customer_email VARCHAR(255) ); CREATE TABLE orders( order_id INT PRIMARY KEY, order_date DATE, customer_id INT, FOREGIN KEY (customer_id) REFERENCES customers(customer_id) );
Customer.hasMany(Order, { foreginKey: 'customer_id'}); Order.belongsTo(Customer, { foreginKey: 'customer_id'});
- hasMany: 한 개의 모델(테이블)이 다른 모델과 1:n 관계를 가질 때 사용
- belongsTo: 다른 모델이 한 모델을 가리키는 1:1(1:다) 관계를 설정하는 데 사용
n:m(다대다)
- 한쪽 레코드가 다른 쪽 레코드 여러 개와 관련되고, 그 반대쪽 레코드도 다른 쪽 레코드 여러 개와 관련되어 있는 관계를 의미
- 두 개체 간의 구성 원소들이 상호 여러 개의 원소들과 대응되는 경우
- 중간 테이블을 사용하여 구현
- ex
- 학생과 과목
- 주문과 제품
- 배우와 영화
CREATE TABLE Students( StudentID INT PRIMARY KEY, StudentName VARCHAR(50) ); CREATE TABLE Teachers( TeacherID INT PRIMARY KEY, TeacherName VARCHAR(50) ); CREATE TABLE StudentTeacherRelation( RelationID INT PRIMARY KEY, StudentID INT, TeacherID INT, FOREIGN KEY (StudentID) REFERENCES Students(StudentID), FOREIGN KEY (TeacherID) REFERENCES Teachers(TeacherID) );
Student.belongToMany(Teacher, { through: StudentTeacherRelation}); Teacher.belongToMany(Student, { through: StudentTeacherRelation});
- belongsToMany: 다:다 관계를 설정할 때 사용되는 메서드
※데이터베이스의 구성요소
- 개체(Entity)
- 사람이 생각하는 개념이나 정보 단위와 같은 현실 세계의 대상체로, 실세계에 존재하는 유형 혹은 무형 정보의 대상이며 서로 구별이 되는 하나하나의 대상을 말한다.
- 개체는 하나 이상의 속성(정보)으로 구성된다.
- 속성(Attribute)
- 개체의 특성이나 혹은 상태를 기술하는 것을 말한다.
- 속성만으로는 개체를 구분하기 어렵다.
- 관계(Relationship)
728x90'[포스코x코딩온] 웹개발자 풀스택 부트캠프8기' 카테고리의 다른 글
Cookie를 활용한 예시(모달창 생성 여부) (0) 2023.08.11 [포스코x코딩온] Cookie(쿠키), Session(세션) (0) 2023.08.11 Join (조인) (SQL 응용) (0) 2023.08.11 [포스코x코딩온] Sequelize 사용하기 (0) 2023.08.11 [포스코x코딩온] 'async'와 'await'을 활용한 회원가입 (0) 2023.08.09