티스토리 뷰

MySQL

인덱스(index) 및 관계차수

yoooon1212 2024. 6. 4. 12:44

MySQL에서 인덱스(index)는 데이터베이스 테이블의 검색 성능을 향상시키기 위해 사용되는 데이터 구조입니다. 인덱스는 특정 열(Column)에 대한 정렬된 데이터 집합으로, 데이터베이스 엔진이 더 빠르게 데이터를 찾을 수 있도록 도와줍니다. 인덱스는 일종의 색인이며, 테이블의 특정 열에 대한 빠른 검색을 가능하게 합니다.

 

인덱스를 사용하면 데이터베이스 엔진은 테이블을 전체적으로 스캔하는 것보다 더 빠르게 특정 조건에 맞는 행을 찾을 수 있습니다.

 

예시 코드)

 

 

 

관계차수

 

관계 차수(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)

  • 두 테이블 간에 다수의 레코드가 서로 매칭됩니다.
  • 이 관계를 구현하기 위해 보통 중간 연결 테이블을 사용하여 각 테이블의 레코드를 연결합니다.
  • 연결 테이블은 각 테이블의 기본키를 외래키로 포함하며, 이들 외래키의 조합이 중간 테이블의 기본키가 되기도 합니다.
  • 예: 학생과 수업 테이블, 여기서 한 학생이 여러 수업을 듣고, 하나의 수업에 여러 학생이 등록될 수 있습니다.

 

예제 문제1)

(1 : 1 관계)

 

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

 

 

 

샘플 데이터 형성

 

 

코드 예시)

 

 

예제 문제 2)

(N : 1 관계)

 

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

 

 

 

  1. 관계의 방향성을 명확히 하기

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

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

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

 

 

샘플 데이터 형성

 

코드 예시)

 

 

예제 문제 3)

(N : M 관계)

 

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

 

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

하나의 수업에 여러명에 학생이 등록 될 수 있다.

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

 

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

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

 

 

 

코드 예시)

'MySQL' 카테고리의 다른 글

테이블 복사 및 데이터 추가  (0) 2024.06.05
JOIN(INNER JOIN 과 OUTER JOIN)  (0) 2024.06.05
UNIQUE 제약  (0) 2024.06.04
DELETE 구문과 조건절  (0) 2024.05.31
UPDATE 구문과 조건절  (0) 2024.05.31
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
글 보관함