๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ‡ฉ๐Ÿ‡ฆ๐Ÿ‡น๐Ÿ‡ฆ๐Ÿ‡ง๐Ÿ‡ฆ๐Ÿ‡ธ๐Ÿ‡ช

SQL ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค DB ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ

๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ(integrity constraint)

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ํ˜„์‹ค ์„ธ๊ณ„์— ์กด์žฌํ•˜๋Š” ์ •๋ณด๋“ค์„ ๋ชจ์ˆœ ์—†์ด ๋ฐ˜์˜ํ•˜๋Š” ์„ฑ์งˆ

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ฐ–์ถ”์–ด์•ผ ํ•  ์ œ์•ฝ ์กฐ๊ฑด์„ ํ•ญ์ƒ ๋งŒ์กฑํ•˜๋„๋ก ๋ณด์žฅํ•˜๋Š” ์„ฑ์งˆ

โ€‹

ํ•™์‚ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ๋Œ€ํ•œ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์˜ ์˜ˆ

- ํ•™์ƒ์€ ํ•˜๋‚˜์˜ ํ•™๊ณผ์— ์†Œ์†๋œ๋‹ค

- ํ•˜๋‚˜์˜ ๊ฐ•์ขŒ์—๋Š” ํ•œ ๋ช…์˜ ๋‹ด๋‹น๊ต์ˆ˜๊ฐ€ ๋ฐฐ์ •๋œ๋‹ค

- ํ•˜๋‚˜์˜ ๊ต๊ณผ๋ชฉ์€ ๊ฐ ํ•™๊ธฐ๋งˆ๋‹ค ๋‘ ๊ฐ•์ขŒ ์ดํ•˜๋งŒ ๊ฐœ์„คํ•  ์ˆ˜ ์žˆ๋‹ค

โ€‹

โœ” ํ˜„์‹ค์„ธ๊ณ„์—์„œ ์ง€์ผœ์ ธ์•ผ ํ•˜๋Š” ๊ทœ์ง์„ ๋งŒ์กฑํ•˜๋Š” ๋ฐ์ดํ„ฐ๋“ค๋งŒ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜๋„๋ก ๊ฐ•์ œํ•˜๋Š” ์—ญํ• 

โ€‹

๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ถฉ์กฑํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ๋ฒ•

- ๋ฐ์ดํ„ฐ๋ฅผ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •ํ•  ๋•Œ๋งˆ๋‹ค ์‚ฌ์šฉ์ž ์ฆ‰ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ์ง์ ‘ ์ฃผ์–ด์ง„ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์˜ ๋งŒ์กฑ ์—ฌ๋ถ€๋ฅผ ๊ฒ€์ฆ

โ—ฝ ๊ฐ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ๊ฐœ๋ณ„์ ์œผ๋กœ ์ด๋Ÿฌํ•œ ์ฒ˜๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•ด์„œ ์‹คํ–‰

โ—ฝ ๋ฐ์ดํ„ฐ์˜ ์–‘์ด ๋ฐฉ๋Œ€ํ•˜๊ฑฐ๋‚˜ ๋ฐ์ดํ„ฐ์˜ ๋ณ€๊ฒฝ ๋นˆ๋„๊ฐ€ ๋†’์„ ๊ฒฝ์šฐ ๋งค์šฐ ๋ณต์žกํ•˜๊ณ  ๋น„ํšจ์œจ์ 

โ€‹

๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์˜ ์œ ํ˜•

 

 

๊ธฐ๋ณธํ‚ค ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ (primary key integrity constraint)

โœ” ๊ธฐ๋ณธํ‚ค๋Š” null ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์œผ๋ฉฐ, ๊ธฐ๋ณธํ‚ค์˜ ๊ฐ’์ด ๋™์ผํ•œ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ•˜๋‚˜์˜ ํ…Œ์ด๋ธ”์— ๋™์‹œ์— ๋‘ ๊ฐœ ์ด์ƒ ์กด์žฌํ•  ์ˆ˜ ์—†์Œ

- ํ…Œ์ด๋ธ”์—์„œ ๋ ˆ์ฝ”๋“œ๋“ค์ด ๋ฐ˜๋“œ์‹œ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„๋  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ์กฐ๊ฑด

- ๊ฐ ๋ ˆ์ฝ”๋“œ๊ฐ€ ํ˜„์‹ค ์„ธ๊ณ„์—์„œ ์„œ๋กœ ๊ตฌ๋ณ„๊ฐ€๋Šฅํ•œ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ผ ๊ฒฝ์šฐ ๋ฐ˜๋“œ์‹œ ํ•„์š”

 

ํ˜•์‹ : constraint <์ œ์•ฝ์‹๋ช…> primary key (<ํ•„๋“œ ๋ฆฌ์ŠคํŠธ>)

โ—ฝ <ํ•„๋“œ ๋ฆฌ์ŠคํŠธ> : ๊ธฐ๋ณธํ‚ค๋กœ ์ •์˜ํ•  ํ•„๋“œ๋“ค์˜ ๋ฆฌ์ŠคํŠธ

create table student(
   stu_id      varchar2(10),
   resident_id varchar2(14),
   name        varchar2(10),
   year        int,
   address     varchar2(10),
   dept_id     varchar2(10),
   constraint  pk_student  primary key (stu_id) )

 

ํ…Œ์ด๋ธ” ์ƒ์„ฑ ์‹œ ๊ธฐ๋ณธํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด

โ• alter ํ…Œ์ด๋ธ”๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ๊ธฐ๋ณธํ‚ค๋ฅผ ๋ณ„๋„๋กœ ์„ค์ • ๊ฐ€๋Šฅ

alter table student
add constraint pk_student primary key (stu_id)

 

์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ

โœ” ํ•œ ํ…Œ์ด๋ธ”์˜ ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์ฐธ์กฐ

- ์ฐธ์กฐ๋˜๋Š” ํ…Œ์ด๋ธ”์— ํ•ด๋‹น ๋ ˆ์ฝ”๋“œ๊ฐ€ ๋ฐ˜๋“œ์‹œ ์กด์žฌํ•˜๊ฑฐ๋‚˜ null ๊ฐ’์„ ๊ฐ€์ง

- ์™ธ๋ž˜ํ‚ค ์กฐ๊ฑด๊ณผ ๋™์ผ

- ์ฐธ์กฐ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ์€ ์™ธ๋ž˜ํ‚ค ์ •์˜์— ์˜ํ•ด DBMS์—์„œ ์ž๋™์ ์œผ๋กœ ๊ฒ€์ฆ

 

ํ˜•์‹ : constraint <์ œ์•ฝ์‹๋ช…> foreign key (<ํ•„๋“œ๋ฆฌ์ŠคํŠธ1>) references <ํ…Œ์ด๋ธ” ์ด๋ฆ„> (<ํ•„๋“œ๋ฆฌ์ŠคํŠธ2>)

โ—ฝ <ํ•„๋“œ๋ฆฌ์ŠคํŠธ1> : ์™ธ๋ž˜ํ‚ค๋กœ ์ •์˜ํ•˜๋Š” ํ•„๋“œ๋“ค์˜ ๋ฆฌ์ŠคํŠธ

โ—ฝ <ํ…Œ์ด๋ธ” ์ด๋ฆ„> : ์ฐธ์กฐ ๋Œ€์ƒ์ธ ํ…Œ์ด๋ธ”์˜ ์ด๋ฆ„

โ—ฝ <ํ•„๋“œ๋ฆฌ์ŠคํŠธ2> : ์ฐธ์กฐ ๋Œ€์ƒ์ธ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค(์ƒ๋žต ๊ฐ€๋Šฅ)

โ€‹

ํ…Œ์ด๋ธ” ์ƒ์„ฑ ๋‹น์‹œ ์™ธ๋ž˜ํ‚ค๋ฅผ ์„ค์ •ํ•˜์ง€ ์•Š์•˜๋‹ค๋ฉด

โ• alter ํ…Œ์ด๋ธ”๋ฌธ์„ ์ด์šฉํ•˜์—ฌ ์™ธ๋ž˜ํ‚ค๋ฅผ ๋ณ„๋„๋กœ ์„ค์ • ๊ฐ€๋Šฅ

alter table student
add constraint fk_dept foreign key (dept_id) references department (dept_id)

 

ํ…Œ์ด๋ธ”์˜ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ

 

โ—ฝ ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ•„๋“œ์— ๋Œ€ํ•ด ์ง€์ผœ์•ผํ•˜๋Š” ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์กฐ๊ฑด์„ ์ •์˜

- not null

- unique

- check

- default

โ€‹

NOT NULL

โœ” ํŠน์ • ํ•„๋“œ์— ๋Œ€ํ•ด์„œ null ๊ฐ’์˜ ์ž…๋ ฅ์„ ๊ธˆ์ง€ํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ

- ๊ธฐ๋ณธํ‚ค๋Š” ์›๋ž˜ null ๊ฐ’์„ ํ—ˆ์šฉํ•˜์ง€ ์•Š์œผ๋ฏ€๋กœ, ๊ธฐ๋ณธํ‚ค๋กœ ์ •์˜๋œ ํ•„๋“œ๋Š” not null ์กฐ๊ฑด์„ ์„ค์ •ํ•˜์ง€ ์•Š์•„๋„๋จ

โ€‹

์˜ˆ)

create table student(
    stu_id       varchar2(10),
    resident_id  varchar2(14)  not null,
    name 		 varchar2(10),
    year         int,
    address      varchar2(10),
    dept_id      varchar2(10)
)

 

UNIQUE

โœ” ํ•ด๋‹น ํ•„๋“œ๊ฐ€ ํ…Œ์ด๋ธ” ๋‚ด์—์„œ ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ–์ง€ ์•Š๊ณ  ๋ฐ˜๋“œ์‹œ ์œ ์ผํ•œ ๊ฐ’์„ ๊ฐ–๋„๋ก ํ•˜๋Š” ์ œ์•ฝ ์กฐ๊ฑด

- unique ์ œ์•ฝ์„ ๋ถ€์—ฌํ•  ์ˆ˜ ์žˆ๋Š” ํ•„๋“œ๋“ค์€ ํ…Œ์ด๋ธ”์˜ ํ›„๋ณดํ‚ค๊ฐ€ ๋  ์ˆ˜ ์žˆ์Œ

- ๋‹จ, not null๋กœ ์ง€์ •๋˜์ง€ ์•Š๋Š” ํ•œ null ๊ฐ’์˜ ์ž…๋ ฅ์€ ํ—ˆ์šฉ

 

ํ˜•์‹ : constraint <์ œ์•ฝ์‹๋ช…> unique (<ํ•„๋“œ ๋ฆฌ์ŠคํŠธ>)

- <์ œ์•ฝ์‹๋ช…> : unique ์ œ์•ฝ์˜ ์ด๋ฆ„

- <ํ•„๋“œ ๋ฆฌ์ŠคํŠธ> : unique ์ œ์•ฝ์„ ์„ค์ •ํ•  ํ•„๋“œ๋“ค์˜ ๋ฆฌ์ŠคํŠธ

โ€‹

์˜ˆ)

create table student(
    stu_id       varchar2(10),
    resident_id  varchar2(14),
    ...
    constraint  uc_rid  unique (resident_id)
)

 

unique ์ œ์•ฝ์„ ๋ณ„๋„๋กœ ์ง€์ •

alter table student 
   add constraint uc_rid unique (resident_id)

 

unique ์ œ์•ฝ ์„ค์ • ํ•ด์ œ

alter table student drop constraint uc_rid

 

CHECK

- ๋„๋ฉ”์ธ ์ œ์•ฝ(domain constraint)

- ๊ฐ ํ•„๋“œ์˜ ๊ฐ’์€ ์ •์˜๋œ ๋„๋ฉ”์ธ์— ์†ํ•œ ๊ฐ’๋งŒ ํ—ˆ์šฉ

- CHECK

โ—ฝ ํ•„๋“œ๋ฅผ ์ •์˜ํ•  ๋•Œ ์ฃผ์–ด์ง„ ๋ฐ์ดํ„ฐ ํƒ€์ž… ์ด์™ธ์—๋„ ์ข€ ๋” ์„ธ๋ถ€์ ์œผ๋กœ ํ—ˆ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์˜ ๋ฒ”์œ„๋ฅผ ์ง€์ •

 

ํ˜•์‹ : constraint <์ œ์•ฝ์‹๋ช…> check (<์กฐ๊ฑด์‹>)

โ€‹

์˜ˆ)

create table student(
  stu_id      varchar2(10),
  resident_id varchar2(14),
  name        varchar2(10),
  year        int,
  address     varchar2(10),
  dept_id     varchar2(10),
  constraint  chk_year  cheak(year >= 1 and year <= 4)
)

 

check ์ œ์•ฝ์„ ๋ณ„๋„๋กœ ์ง€์ •

alter table student
  add constraint chk_year check(year >= 1 and year <= 4)

 

check ์ œ์•ฝ์„ ํ•ด์ œ

alter table student drop constraint chk_year

 

DEFAULT

โœ” ๋ ˆ์ฝ”๋“œ๋ฅผ ์‚ฝ์ž…ํ•  ๋•Œ, ํ•„๋“œ์— ๋Œ€ํ•œ ๊ฐ’์ด ์ •ํ•ด์ง€์ง€ ์•Š์„ ๊ฒฝ์šฐ ์‚ฌ์ „์— ์ •ํ•ด๋†“์€ ๊ฐ’์ด ์ž…๋ ฅ๋˜๋„๋ก default๊ฐ’์„ ์„ค์ •

- null ๊ฐ’ ๋Œ€์‹ ์— ์ง€์ •๋œ ๊ฐ’์ด ์ž๋™์ ์œผ๋กœ ์ €์žฅ๋จ

 

์˜ˆ)

create table student(
   stu_id      varchar2(10),
   resident_id varchar2(14),
   name        varchar2(10),
   year        int             default 1,
   address     varchar2(10),
   dept_id     varchar2(10)
)

 

default ์ œ์•ฝ์„ ๋ณ„๋„๋กœ ์ง€์ •

alter table student
   alter column year set default 1

 

default ์ œ์•ฝ ํ•ด์ œ

alter table student
   alter column year drop default

 

๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ ์„ค์ •์˜ ์œ ์˜์ 

โ• ์ง€๋‚˜์น˜๊ฒŒ ๋งŽ์€ ์ œ์•ฝ์กฐ๊ฑด๋“ค์ด ์กด์žฌํ•  ๊ฒฝ์šฐ ์˜ˆ์™ธ์ ์ธ ๋ฐ์ดํ„ฐ๊ฐ€ ์ž…๋ ฅ๋  ๋•Œ ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

โ• ๊ฐ ๋ ˆ์ฝ”๋“œ์— ๋Œ€ํ•œ ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ • ์—ฐ์‚ฐ์„ ํ•  ๋•Œ DBMS๊ฐ€ ์ •์˜๋œ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ๋“ค์ด ๋ชจ๋‘ ๋งŒ์กฑํ•˜๋Š”์ง€ ๊ฒ€์ฆ

โ€‹

Assertion

ํ˜•์‹ : create assertion <assertion ์ด๋ฆ„> check <์กฐ๊ฑด์‹>

โ€‹

์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ์˜ ๋ฌด๊ฒฐ์„ฑ ์ œ์•ฝ

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ์ž๊ฐ€ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์—์„œ ์ง์ ‘ ๋ฌด๊ฒฐ์„ฑ์„ ๋ณด์žฅํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜์—ฌ ์‹คํ–‰