ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • Relationship(관계)(1:1, 1:다, 다:다)(데이터베이스 응용)
    [포스코x코딩온] 웹개발자 풀스택 부트캠프8기 2023. 8. 11. 19:37
    728x90

    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
Designed by Tistory.