• 티스토리 홈
  • 프로필사진
    tjdudtn
  • 방명록
  • 공지사항
  • 태그
  • 블로그 관리
  • 글 작성
tjdudtn
  • 프로필사진
    tjdudtn
    • 분류 전체보기 (299)
      • JAVA (155)
        • JAVA 수업 메모 (0)
        • JAVA 수업 파일 (0)
        • JAVA 기초문법 (18)
        • JAVA 객체지향 핵심 (25)
        • JAVA 유용한 클래스 (33)
        • JAVA Swing (18)
      • Data Structure( 자료구조 ) (17)
        • 컬렉션 프레임워크 (4)
        • JDBC (8)
      • 기초 개념 및 환경 설정 (17)
        • HTTP 기초 지식 (사전기반지식) (13)
        • 웹 서버와 웹 애플리케이션 서버(WAS)란? (1)
        • WAS와 웹 컨테이너의 역할 (1)
        • 아파치 톰캣 설치하기 (1)
        • 아파치 톰캣 시작과 폴더 구조 확인 (1)
      • 서블릿 기본 개념과 활용 (8)
        • 서블릿이란? (1)
        • 서블릿 Life Cycle 이란? (1)
        • 서블릿 작성, 배포, web.xml 설정의 이해 (1)
        • Get, Post 요청 방식의 이해 (1)
        • 서블릿과 서블릿 컨텍스트란? (1)
        • 서블릿과 데이터베이스 연동 (1)
        • 잠깐! server.xml과 context.xml.. (1)
        • 서블릿 필터와 리스너란 뭘까? (1)
      • JSP 기본 문법과 구조 (9)
        • JSP(Java Server Pages) 란? (1)
        • JSP 라이프사이클 (1)
        • JSP 기초문법 (1)
        • JSP 주석과 지시자 (1)
        • JSP 기본 태그 ( 스크립트릿, 선언, 표현식 .. (1)
        • JSP 지시자 ( Directive ) 간단 정리 (1)
        • JSP 내장 객체란 뭘까? (1)
        • 폼 처리와 요청 방식 (1)
        • 쿠키와 세션 관리 (1)
      • 서블릿과 JSP의 연동 (7)
        • 서블릿과 JSP의 개념과 차이점 (1)
        • 간단한 게시판 만들어 보기 (1)
        • JSP와 MVC 패턴 Todo 프로젝트 (1)
        • 커스텀 태그 ( JSTL ) 라이브러리 사용, (.. (1)
        • JSTL을 활용한 게시판 기능 만들기 (1)
        • JSP 파일 업로드 (1)
        • JSP 프로그래밍 활용 (1)
      • JavaScript (24)
        • JavaScript 게시판 만들기 (9)
      • Spring Boot (34)
        • Bank App 만들기 (deployment) (31)
      • Flutter (8)
      • MySQL (20)
      • 기술 면접 준비 자료 (0)
  • 방문자 수
    • 전체:
    • 오늘:
    • 어제:
  • 최근 댓글
      등록된 댓글이 없습니다.
    • 최근 공지
        등록된 공지가 없습니다.
      # Home
      # 공지사항
      #
      # 태그
      # 검색결과
      # 방명록
      • 관계 차수란?
        2024년 09월 22일
        • tjdudtn
        • 작성자
        • 2024.09.22.:52

        관계 차수(Relation Degree)는 관계형 데이터베이스에서 사용되는 용어로 테이블 간의 관계를 설명할 때는 '일대일', '일대다', '다대다' 같은 관계를 설명하는 용어입니다.

         

        혼동하지 말자.

        1. 테이블 차수 - 테이블 내의 컬럼 수를 나타냅니다.
        2. 관계 차수 - 두 테이블 간의 관계의 복잡성(예: 일대일, 일대다, 다대다)을 나타냅니다.

         

         

        💡 테이블 간의 관계를 정의하는 방식에는 주로 네 가지 유형이 있습니다.

        1:1 관계 (One-to-One Relationship)
        두 개의 테이블에서 각각 하나의 레코드가 서로 직접 매칭되는 관계입니다.
        이 관계는 보통 서로 다른 테이블의 기본키와 외래키를 사용하여 연결합니다.

        예: 사용자 테이블과 사용자 상세 정보 테이블, 여기서 각 사용자는 상세 정보와 정확히 하나씩 연결됩니다.
        예: 사람과 여권, 사람을 나타내는 Persons 테이블과 여권 정보를 나타내는 Passports 테이블이 있습니다.

        1:N 관계 (One-to-Many Relationship)
        한 테이블의 하나의 레코드가 다른 테이블의 여러 레코드와 매칭됩니다.
        이 관계는 주로 한 테이블의 기본키가 다른 테이블의 외래키로 사용되어 연결됩니다.

        예: 고객 테이블의 각 고객이 여러 주문 레코드와 연결되는 경우 (고객이 여러 주문을 가짐).

        N:1 관계 (Many-to-One Relationship)
        다수의 레코드가 한 테이블의 단일 레코드와 매칭되는 관계입니다.
        이는 1:N 관계의 반대 개념이며, 구현 방식은 동일합니다.

        예: 여러 주문이 하나의 고객에게 속하는 경우.

        N:M 관계 (Many-to-Many Relationship)
        두 테이블 간에 다수의 레코드가 서로 매칭됩니다.
        이 관계를 구현하기 위해 보통 중간 연결 테이블을 사용하여 각 테이블의 레코드를 연결합니다.
        연결 테이블은 각 테이블의 기본키를 외래키로 포함하며, 이들 외래키의 조합이 중간 테이블의 기본키가 되기도 합니다.

        예: 학생과 수업 테이블, 여기서 한 학생이 여러 수업을 듣고, 하나의 수업에 여러 학생이 등록될 수 있습니다.

         

        사용자 테이블(tb_user)과 사용자 상세 정보 테이블(tb_user_details)의 구조 만들어 보기

        tb_user

        user_id INT 사용자의 고유 식별자, 기본키
        username VARCHAR(50) 사용자명
        password VARCHAR(50) 비밀번호

        tb_user_details

        details_id INT 상세 정보의 고유 식별자, 기본키
        user_id INT 사용자 ID, 외래키
        address VARCHAR(100) 주소
        phone_number VARCHAR(15) 전화번호
        email VARCHAR(50) 이메일

        2. 샘플 데이터

        tb_user

        +---------+----------+----------+
        | user_id | username | password |
        +---------+----------+----------+
        | 1       | 김영희   | pass123  |
        | 2       | 이철수   | pass456  |
        +---------+----------+----------+
        
        

        tb_user_details

        +------------+---------+----------------+--------------+-----------------------+
        | details_id | user_id | address        | phone_number | email                 |
        +------------+---------+----------------+--------------+-----------------------+
        | 1          | 1       | 서울시 강남구   | 010-1234-5678| younghee@example.com  |
        | 2          | 2       | 부산시 해운대구 | 010-8765-4321| cheolsu@example.com   |
        +------------+---------+----------------+--------------+------------------------+
        
        

        3. 테이블 생성 쿼리 ( 기본키와 외래키 설정)

        drop table tb_user;
        
        create table TB_USER(
        	user_id int auto_increment,
            username varchar(50) not null, 
            password varchar(50) not null, 
            primary key(user_id)
        );
        
        create table tb_user_details(
        	details_id int auto_increment, 
            user_id int unique,
            address varchar(100), 
            phone_number varchar(15), 
            email varchar(50), 
        	primary key(details_id), 
            foreign key(user_id) references tb_user(user_id)
        );
        
        

        야구 선수 테이블과 야구팀에 테이블에 관계는?

        tb_team 테이블 구조

         

        team_id INT 팀의 고유 식별자, 기본키
        team_name VARCHAR 팀의 이름
        home_city VARCHAR 팀의 홈 도시
        established_year YEAR 팀의 창단 연도

        tb_player 테이블 구조

         

        player_id INT 선수의 고유 식별자, 기본키
        player_name VARCHAR 선수의 이름
        position VARCHAR 선수의 포지션
        birth_date DATE 선수의 생년월일
        team_id INT 선수가 속한 팀의 ID, 외래키
        관계 차수 
        외래키는 누가 가지고 있어야 할까???   
        
               N                     :                1
             야구 선수                            야구 팀 
        1  / 홍 / 30 / 롯데                1 /  롯데  / 창립 년도 
        2  / 김 / 21 / 롯데                2 /  해태  / 창립 년도 
        3  / 나 / 29 / 해태                3 /  기아  / 창립 년도 
        4  / 박 / 25 / 넥슨                4 /  넥슨  / 창립 년도  
        5  / 이 / 19 / 기아 
        6  / 최 / 27 / 넥슨 
        
        1. 관계의 방향성을 명확히 하기

        한 팀은 여러명의 선수를 가질 수 있다, 한 선수는 한 팀에만 속할 수 있다.

        한 팀은 여러명의 선수 —> 1 : N , 팀 : 선수 == 1 : N

        한 선수는 하나의 팀 —> N : 1 선수 : 팀 == N : 1

        tb_team

        +---------+--------------+-----------+----------------+
        | team_id | team_name    | home_city | established_year|
        +---------+--------------+-----------+----------------+
        | 1       | 서울 타이거즈 | 서울       | 1982           |
        | 2       | 부산 베어스   | 부산       | 1976           |
        +---------+--------------+-----------+----------------+
        

        tb_player

        +-----------+--------------+-----------+------------+---------+
        | player_id | player_name  | position  | birth_date | team_id |
        +-----------+--------------+-----------+------------+---------+
        | 1         | 김민          | 투수       | 1990-05-15 | 1       |
        | 2         | 이진          | 포수       | 1988-08-25 | 1       |
        | 3         | 최영          | 외야수     | 1992-03-30 | 2       |
        +-----------+--------------+-----------+------------+---------+
        
        

        학생과 수업 테이블은 관계 차수가 어떻게 될까?

        학생과 수업테이블은 하나의 학생이 여러개 수업을 들을 수 있다. 하나의 수업에 여러명에 학생이 등록 될 수 있다.

         

        N:M 관계가 형성이 된다.

         

        N:M 관계는 각 엔티티의 인스턴스가 다수의 인스턴스와 연결이 될 수 있기 때문에, 두 엔티티 간에 직접적인 링크를 만들거나 표현하기는 거의 불가능하다.

         

        해결 방법은 - 중간 테이블 설계해서 관계를 표현할 수 있다.

         

        tb_student

         

        student_id int 학생의 고유 식별자, 기본키
        student_name VARCHAR(100) 학생의 이름

        tb_class

         

        class_id INT 수업에 고유 식별자, 기본키
        class_name VARCHAR(100) 수업에 이름
        teacher VARCHAR(100) 강사의 이름

        수강등록

        tb_registration

         

        student_id INT 학생 ID, 외래키
        class_id INT 수업 ID, 외래키
        registration_date DATE 등록 날짜

        테이블 생성 쿼리

        create database mydb2;
        use mydb2; 
        
        create table tb_student(
        	student_id int auto_increment primary key, 
            student_name varchar(100) not null
        );
        
        create table tb_class(
        	class_id int  auto_increment, 
            class_name varchar(100) not null, 
            teacher varchar(20) not null,
            primary key(class_id)
        ); 
        
        -- 학생과 수업 테이블 N:M 관계가 형성 된다. 
        -- 중간 테이블 설계 (수강등록 테이블) 
        create table tb_registration(
        	student_id int, 
            class_id int, 
            registration_date date,
            primary key(student_id, class_id),
            foreign key(student_id) references tb_student(student_id),
            foreign key(class_id) references tb_class(class_id)
        );
        
        desc tb_registration;
        

        'MySQL' 카테고리의 다른 글

        테이블 복사 및 데이터 추가  (0) 2024.09.22
        MySQL JOIN  (0) 2024.09.22
        MySQL에서 인덱스(index)란  (0) 2024.09.22
        UNIQUE 제약에 이해  (0) 2024.09.22
        DELETE 구문과 조건절  (3) 2024.09.22
        다음글
        다음 글이 없습니다.
        이전글
        이전 글이 없습니다.
        댓글
      조회된 결과가 없습니다.
      스킨 업데이트 안내
      현재 이용하고 계신 스킨의 버전보다 더 높은 최신 버전이 감지 되었습니다. 최신버전 스킨 파일을 다운로드 받을 수 있는 페이지로 이동하시겠습니까?
      ("아니오" 를 선택할 시 30일 동안 최신 버전이 감지되어도 모달 창이 표시되지 않습니다.)
      목차
      표시할 목차가 없습니다.
        • 안녕하세요
        • 감사해요
        • 잘있어요

        티스토리툴바