Notice
Recent Posts
Recent Comments
Link
«   2024/07   »
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
Archives
Today
Total
관리 메뉴

브래의 슬기로운 코딩 생활

데이터베이스 3주차 정리 본문

2-1/데이터베이스

데이터베이스 3주차 정리

김브래 2023. 3. 20. 20:42

Primary Key (기본키)

Primary Key는 테이블 당 하나만 존재할 수 있는 가장 기본이 되는 Key이다.
한 테이블/릴레이션에서 특정 레코드/튜플을 유일하게 구별할 수 있는 고유식별 속성을 나타낸다.
그러므로 다른 레코드 값과 중복될 수 없고 NULL일 수도 없다.

 

Primary Key (기본키) 설정하기

 

테이블을 새로 만들 때 (column1이 primary key일 경우):

CREATE TABLE table_name(

  column1 datatype NOT NULL PRIMARY KEY,

  column2 datatype,

  …

);

이미 만들어진 테이블을 수정할 때:

ALTER TABLE table_name

ADD PRIMARY KEY (column_name);

이 경우에는 primary key로 설정하는 column이 NOT NULL이어야 한다.


Unique Key (유니크키)

 

Unique키는 값의 중복을 허용하지 않는 key이다
Unique Key가 설정된 칼럼에 입력되는 데이터가 각각 유일하다는 것을 보장해준다
하나의 테이블에 여러 개의 Unique Key를 설정할 수 있다.
주로 Primary Key 를 설정한 후 추가적으로 고유한 식별자가 있는 경우 Unique Key로 설정.
Unique Key의 값은 NULL 값이 허용된다.

 

Unique Key (유니크키) 설정하기

 

테이블을 새로 만들 때 (column1,2가 고유 식별자일 경우):

 

CREATE TABLE table_name(

  column1 datatype UNIQUE,

  column2 datatype UNIQUE,

  column3 datatype,

  …

);

 

혹은

 

CREATE TABLE table_name(

  column1 datatype,

  column2 datatype,

  column3 datatype,

  …,

               UNIQUE INDEX index1_name (column1),

               UNIQUE INDEX index2_name (column2)

);

 

이미 만들어진 테이블 스키마를 수정할 때:

 

ALTER TABLE table_name

ADD UNIQUE INDEX index_name (column_name);

 

혹은

 

ALTER TABLE table_name

ADD UNIQUE (column_name);


Index Key (인덱스키)

 

테이블 마다 여러 개의 인덱스 Key 설정 가능.
중복 값과 NULL 값이 허용된다.
검색 속도를 향상시키기 위한 용도로 활용.

 

Index Key (인덱스키) 설정하기

 

테이블을 새로 만들 때 (column1,2에 대해 인덱스를 만드는 경우):

 

CREATE TABLE table_name(

  column1 datatype,

  column2 datatype,

  column3 datatype,

  …,

               INDEX index1_name (column1),

               INDEX index2_name (column2)

);

 

이미 만들어진 테이블 스키마를 수정할 때:

 

ALTER TABLE table_name

ADD INDEX index_name (column_name);


AUTO_INCREMENT

 

AUTO_INCREMENT는 각 칼럼의 기본값으로 설정해 줄 수 있는 옵션 중 하나이다.

 - 주로 고유 식별자 번호를 자동으로 발급하는데 사용된다.

 - 레코드의 값이 중복되지 않고 1씩 자동 증가하게 된다

 

※ INSERT INTO로 레코드 추가시 AUTO_INCREMENT에 해당하는 컬럼에 NULL을 넣거나

   입자 목록에서 생략하면 자동으로 값이 채워진다.

 

예시)

INSERT INTO market VALUES(NULL, '김민준', '사과', 50, 1300, '2023-03-07 10:10:10’);

  OR

INSERT INTO market (seller, product, amount, price, reg_date)

VALUES('김민준', '사과', 50, 1300, '2023-03-07 10:10:10’);


실습 / 답


무결성 제약조건

무결성이란 데이터의 정확성, 일관성을 나타낸다.
데이터에 결함이 없는 상태, 즉 데이터를 정확하고 일관되게 유지하는 것을 의미한다
 
무결성 제약조건 이란 데이터베이스의 정확성, 일관성을 보장하기 위해
저장, 삭제, 수정 등을 제약하기 위한 조건을 뜻한다

1.개체 무결성 제약조건 (기본키 제약조건, Primary key Constraint)
각 테이블의 Primary key를 구성하는 속성(들)은 NULL 값이나 중복 값이 될 수 없다

  > account의 Primary key인 nickname 안에 값들은 NULL 값이나 중복 값이 될 수 없다

 

2.참조 무결성 제약조건  (외래키 제약조건, Foreign key constraint)
Foreign key 컬럼의 값은 NULL이거나 참조하는 부모 테이블 컬럼의 값과 동일해야 한다.

   > market의 seller에는 account(nickname) 안에 존재하지 않는 값이 들어갈 수 없다.

 

3.도메인 무결성 제약조건 (Domain Constraint)
속성 안에 들어가는 값들은 정의된 도메인에 속한 값이어야 한다.

  > market의 seller와 product에는 문자열, amount에는 INT, price에는 BIGINT,      reg_date에는 DATETIME 형식의 값이 들어가야 한다.

 

4. 고유 무결성 제약조건 (Unique Constraint)
속성의 값들이 서로 달라야 한다. (단, NULL은 허용)
phone_number 안에 값들은 모두 고유한 값이어야 한다.

개념적 Key의 종류

슈퍼키

투플을 유일하게 식별할 수 있는 하나의 속성 혹은 속성의 집합

투플을 유일하게 식별할 수 있는 값이면 모두 슈퍼키가 될 수 있음

 

(고객 릴레이션 예)

고객번호 : 고객별로 유일한 값이 부여되어 있기 때문에 투플을 식별할 수 있음
이름 : 동명이인이 있을 경우 투플을 유일하게 식별할 수 없음
주민번호 : 개인별로 유일한 값이 부여되어 있기 때문에투플을 식별할 수 있음
주소 : 가족끼리는 같은 정보를 사용하므로 투플을 식별할 수 없음
핸드폰 : 한 사람이 여러 개의 핸드폰을 사용할 수 있고 반대로 핸드폰을 사용하지 않는 사람이 있을 수 있기 때문에 투플을 식별할 수 없음
고객번호 이름 주민번호 주소 핸드폰
1 박지성 810101-1111111 영국 맨체스터 000-5000-0001
2 김연아 900101-2222222 대한민국 서울 000-6000-0001
3 장미란 830101-2333333 대한민국 강원도 000-7000-0001
4 추신수 820101-1444444 미국 클리블랜드 000-8000-0001
고객 릴레이션은 고객번호와 주민번호를 포함한 모든 속성의 집합이 슈퍼키가 됨

EX)  (주민번호), (주민번호, 이름), (주민번호, 이름, 주소), (주민번호, 이름, 핸드폰), (고객번호), (고객번호, 이름, 주소), (고객번호, 이름, 주민번호, 주소, 핸드폰) 등

 

후보키

투플을 유일하게 식별할 수 있는 속성의 최소 집합


(주문 릴레이션 예)

고객번호 : 한 명의 고객이 여러 권의 도서를 구입할 수 있으므로 후보키가 될 수 없고, 
고객번호가 1인 박지성 고객은 세 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음 
도서번호 : 도서번호가 2인 ‘축구 아는 여자’는 두 번의 주문 기록이 있으므로 투플을 유일하게 식별할 수 없음

주문 릴레이션의 후보키는 2개의 속성을 합한 (고객번호, 도서번호)가 됨
2개 이상의 속성으로 이루어진 키를 복합키(composite key)라고 함
 

기본키

여러 후보키 중 하나를 선정하여 대표로 삼는 키
 
후보키가 하나뿐이라면 그 후보키를 기본키로 사용하면 되고,
여러 개라면 릴레이션의 특성을 반영하여 하나를 선택하면 됨
 
기본키 선정 시 고려사항
- 릴레이션 내 투플을 식별할 수 있는 고유한 값을 가져야 함.
- NULL 값은 허용하지 않음.
- 키 값의 변동이 일어나지 않아야 함.
- 최대한 적은 수의 속성을 가진 것이라야 함.
- 향후 키를 사용하는 데 있어서 문제 발생 소지가 없어야 함.
 
릴레이션 스키마를 표현할 때 기본키는 밑줄을 그어 표시함

릴레이션 이름(속성1, 속성2, …. 속성N)

EX) 고객(고객번호, 이름, 주민번호, 주소, 핸드폰) 도서(도서번호, 도서이름, 출판사, 가격)

 

대리키

기본키가 보안을 요하거나, 여러 개의 속성으로 구성되어 복잡하거나, 마땅한 기본키가 없을 때는 일련번호 같은 가상의 속성을 만들어 기본키로 삼는 경우가 있음 이러한 키를 대리키(surrogate key) 혹은 인조키(artificial key)라고 함
 
대리키는 DBMS나 관련 소프트웨어에서 임의로 생성하는 값으로 사용자가 직관적으로 그 값의 의미를 알 수 없음

 

대체키

기본키로 선정되지 않은 후보키
 
고객 릴레이션의 경우 고객번호와 주민번호 중 고객번호를 기본키로 정하면 주민번호가 대체키가 됨

 

외래키

다른 릴레이션의 기본키를 참조하는 속성을 말함
다른 릴레이션의 기본키를 참조하여 관계 데이터 모델의 특징인 릴레이션 간의 관계(relationship)를 표현함
 
외래키의 특징
- 관계 데이터 모델의 릴레이션 간의 관계를 표현함
- 다른 릴레이션의 기본키를 참조하는 속성임
- 참조하고(외래키) 참조되는(기본키) 양쪽 릴레이션의 도메인은 서로 같아야 함
- 참조되는(기본키) 값이 변경되면 참조하는(외래키) 값도 변경됨
- NULL 값과 중복 값 등이 허용됨
- 자기 자신의 기본키를 참조하는 외래키도 가능함
- 외래키가 기본키의 일부가 될 수 있음

 

외래키 사용 시 참조하는 릴레이션과 참조되는 릴레이션이 꼭 다른 릴레이션일 필요는 없음.
즉 자기 자신의 기본키를 참조할 수도 있음


인덱스 더 알아보기*

 

인덱스는 B-Tree 형태로 만들어진다

B-Tree : Balanced Tree, 균형트리. DBMS는 빠른 값 검색을 위해 Key를 B-Tree로 정렬해 둔다.*

논클러스터 방식

B-Tree의 말단에 바로 데이터를 정렬해 두는 방식도 있다. 클러스터 방식이라고 한다.*

클러스터 방식

*논클러스터 방식

- 레코드 추가가 빠르다
- 검색이 느리다

 

*클러스터 방식

- 레코드 추가가 느리다
- 검색이 빠르다
- Key가 여러 개일 경우에도 테이블당 하나만 생성 됨.

'2-1 > 데이터베이스' 카테고리의 다른 글

데이터베이스 5주차 과제  (0) 2023.04.04
데이터베이스 5주차 정리  (0) 2023.04.03
데이터베이스 4주차 정리  (0) 2023.03.27
데이터베이스 2주차 정리  (0) 2023.03.13
데이터베이스 1주차 정리  (0) 2023.03.06