SQL Table, constraints

[Database] SQL์˜ ๊ธฐ๋ณธ ๊ฐœ๋…๊ณผ DB๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๋Š” SQL ๊ธฐ๋ณธ ๋ฌธ๋ฒ•

SQL ๊ธฐ๋ณธ ๊ฐœ๋…

์˜๋ฏธ

  • Structured Query Language

  • ํ˜„์—…์—์„œ ์“ฐ์ด๋Š” relational DBMS์˜ ํ‘œ์ค€์–ธ์–ด

  • ์ข…ํ•ฉ์ ์ธ database ์–ธ์–ด : DDL + DML + VDL

์ฃผ์š” ์šฉ์–ด

relational data model ์™€ ๋น„๊ต

relational data model
SQL

relation

table

attribute

column

tuple

row

domain

domain

  • relational data model ์šฉ์–ด์™€ SQL ์šฉ์–ด๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ํ˜ผ์šฉํ•ด์„œ ์‚ฌ์šฉํ•˜๊ธฐ๋„ ํ•จ

SQL์—์„œ relation์ด๋ž€?

  • multiset of tuples

  • relational data model์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์ค‘๋ณต๋œ tuple์„ ํ—ˆ์šฉํ•จ

SQL๊ณผ RDBMS

  • SQL์€ RDBMS์˜ ํ‘œ์ค€ ์–ธ์–ด์ด์ง€๋งŒ, ์‹ค์ œ ๊ตฌํ˜„์— ๊ฐ•์ œ๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์• , RDBMS๋งˆ๋‹ค ์ œ๊ณตํ•˜๋Š” SQL์˜ ์ŠคํŽ™์ด๋‚˜ ๋ฌธ๋ฒ•์ด ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฆ„

์˜ˆ์ œ๋ฅผ ํ†ตํ•œ SQL๋กœ DB ์ •์˜ํ•˜๊ธฐ

ITํšŒ์‚ฌ ๊ด€๋ จ RDB ๋งŒ๋“ค๊ธฐ ๋ถ€์„œ, ์‚ฌ์›, ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ์ •๋ณด๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค MySQL(InnoDB)๋ฅผ ์‚ฌ์šฉํ•จ

database ์ •์˜ํ•˜๊ธฐ

  • database์˜ ๋ชฉ๋ก ๋ณด๊ธฐ

  • database ๋งŒ๋“ค๊ธฐ

  • ํ˜„์žฌ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”(์„ ํƒ๋œ) ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šคํ™•์ธ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ฌ์šฉ

  • ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์‚ญ์ œ

DATABASE vs SCHEMA

  • MySQL์—์„œ๋Š” DATABASE์™€ SCHEMA๊ฐ€ ๊ฐ™์€ ๋œป์„ ์˜๋ฏธํ•จ

  • CREATE DATABASE companey = CREATE SCHEMA company

  • ๋‹ค๋ฅธ RDBMS์—์„œ๋Š” ์˜๋ฏธ๊ฐ€ ๋‹ค๋ฅด๊ฒŒ ์“ฐ์ž„ (PostgreSQL์—์„œ๋Š” SCHEMA๊ฐ€ DATABASE์˜ namespace๋ฅผ ์˜๋ฏธํ•จ)

table ๋งŒ๋“ค๊ธฐ

ITํšŒ์‚ฌ RDB ๋งŒ๋“ค๊ธฐ ๋ถ€์„œ, ์‚ฌ์›, ํ”„๋กœ์ ํŠธ ๊ด€๋ จ ์ •๋ณด๋“ค์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋Š” ๊ด€๊ณ„ํ˜• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ๋งŒ๋“ค๊ธฐ

SCHEMA ์ •์˜

table_schema

table ์ƒ์„ฑ ์ฟผ๋ฆฌ

  • CREATE TABLE < table_name >

  • ๊ด„ํ˜ธ() ์•ˆ์—์„œ ์ฝค๋งˆ, ๋กœ ๊ตฌ๋ถ„ํ•˜์—ฌ attribute๋ฅผ ์„ค์ •ํ•ด์คŒ

  • attribute๋Š” < ์ด๋ฆ„ > < ๋ฐ์ดํ„ฐ ํƒ€์ž… > < constraints(์ œ์•ฝ์‚ฌํ•ญ) > ์„ ์ˆœ์„œ๋Œ€๋กœ ์”€

  • ๊ด„ํ˜ธ()๊ฐ€ ๋๋‚˜๋ฉด ์„ธ๋ฏธ์ฝœ๋ก ; ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•จ

DEPARTMENT table

EMPLOYEE table

PROJECT table

WORKS_ON table

Atrribute ์ •์˜

Data type

RDBMS๋งˆ๋‹ค ์กฐ๊ธˆ์”ฉ ๋‹ค๋ฆ„. ์‚ฌ์šฉํ•˜๋Š” RDBMS์— ๋”ฐ๋ผ docs ํ™•์ธํ•˜๊ธฐ

์ˆซ์ž

๋ฌธ์ž์—ด

์‹œ๊ฐ„

๊ธฐํƒ€

attribute_data_type_ect

Constraints

Key constraints

PRIMARY KEY

  • table์˜ tuple์„ ์‹๋ณ„ํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ

  • ํ•˜๋‚˜ ์ด์ƒ์˜ attribute(s)๋กœ ๊ตฌ์„ฑ๋จ

  • ์ค‘๋ณต๋œ ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์œผ๋ฉฐ, NULL ๋„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ (UNIQUE NOT NULL)

  • ์„ ์–ธ ๋ฐฉ๋ฒ•

    • ํ•˜๋‚˜์ผ ๋•Œ

    • ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ

UNIQUE

  • ํ•ด๋‹น atrribute๋Š” ์ค‘๋ณต๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ

  • ๋‹จ, NULL์€ ์ค‘๋ณต์„ ํ—ˆ์šฉํ•  ์ˆ˜๋„ ์žˆ์Œ(RDBMS ๋งˆ๋‹ค ๋‹ค๋ฆ„)

  • ์„ ์–ธ ๋ฐฉ๋ฒ• : PRIMARY KEY ์ฒ˜๋Ÿผ ํ•˜๋‚˜์ผ๋–„๋ž‘ ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ ๋ฐฉ๋ฒ• ๋‘˜ ๋‹ค ํ•  ์ˆ˜ ์žˆ์Œ

  • NOT NULL๊ณผ ๊ฐ™์ด ์“ฐ๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Œ

NOT NULL

  • ํ•ด๋‹น atrribute๋Š” NULL์„ ๊ฐ’์œผ๋กœ ๊ฐ€์งˆ ์ˆ˜ ์—†์Œ

  • ์„ ์–ธ ๋ฐฉ๋ฒ• : attribute level๋กœ๋งŒ ์„ ์–ธ ๊ฐ€๋Šฅ.

DEFAULT

  • ๊ธฐ๋ณธ ๊ฐ’์„ ์„ค์ •ํ•จ

  • ํŠœํ”Œ์„ ์ƒ์„ฑํ•  ๋•Œ ํ•ด๋‹น attribute์— ๊ฐ’์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด, ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์„ค์ •๋จ

CHECK constraint

  • attribute์˜ ๊ฐ’์„ ์ œํ•œํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ

  • ์ตœ์†Ÿ๊ฐ’, ์ตœ๋Œ€๊ฐ’ ๋“ฑ์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Œ

  • ์„ ์–ธ ๋ฐฉ๋ฒ•

    • ํ•˜๋‚˜์ผ ๋•Œ : attribute line์—์„œ ์„ค์ • ๊ฐ€๋Šฅ

    • ํ•˜๋‚˜ ์ด์ƒ์ผ ๋•Œ : ๋งจ ๋ฐ‘์—์„œ ๋ฌถ์–ด์„œ ์„ค์ • ๊ฐ€๋Šฅ

FOREIGN KEY(Referential integrity constraint)

  • ๋‹ค๋ฅธ table์˜ primary key๋‚˜ unique key๋ฅผ ์ฐธ์กฐํ•  ๋•Œ ์‚ฌ์šฉ

  • FK์˜ ๊ฐ’์€ ์ฐธ์กฐํ•˜๋Š” PK(or unique key)์— ์žˆ๋Š” ๊ฐ’์ด์–ด์•ผ ํ•จ

  • ์„ ์–ธ ๋ฐฉ๋ฒ•

  • reference_option(sql ํ‘œ์ค€ ์ŠคํŽ™)

    option
    ์„ค๋ช…

    CASCADE

    ์ฐธ์กฐ ๊ฐ’์˜ ์‚ญ์ œ/๋ณ€๊ฒฝ์„ ๊ทธ๋Œ€๋กœ ๋ฐ˜์˜(์‚ญ์ œ๋˜๋ฉด ํŠœํ”Œ์ด ํ†ต์ฑ„๋กœ ์‚ญ์ œ๋˜๊ณ , ์ˆ˜์ •๋˜๋ฉด ๊ฐ™์ด ์ˆ˜์ •๋จ

    SET NULL

    ์ฐธ์กฐ ๊ฐ’์ด ์‚ญ์ œ/๋ณ€๊ฒฝ ์‹œ NULL๋กœ ๋ณ€๊ฒฝ

    RESTRICT

    ์ฐธ์กฐ ๊ฐ’์ด ์‚ญ์ œ/๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์„ ๊ธˆ์ง€

    NO ACTION

    RESTRICT์™€ ์œ ์‚ฌ(ํ•œ ํŠธ๋žœ์ ์…˜ ๋‚ด์—์„œ๋Š” ๋ณ€๊ฒฝ๋˜๋Š” ๊ฒƒ์€ ์ธ์ •, ํŠธ๋žœ์ ์…˜ ๋๋‚ฌ์„ ๋•Œ ๋ณ€๊ฒฝ๋œ ์ƒํƒœ๋กœ ๋๋‚˜๋ฉด RESTRICT์ฒ˜๋Ÿผ ๋™์ž‘

    SET DEFAULT

    ์ฐธ์กฐ ๊ฐ’์ด ์‚ญ์ œ/๋ณ€๊ฒฝ ์‹œ default ๊ฐ’์œผ๋กœ ๋ณ€๊ฒฝ

    • MySQL์—์„œ๋Š” ์œ„ ์„ธ๊ฐœ๋งŒ ์ง€์›ํ•จ

    • PostgreSQL๋Š” 5๊ฐœ ๋‹ค ์ง€์›ํ•จ

constraint ์ด๋ฆ„ ๋ช…์‹œํ•˜๊ธฐ

  • ์œ„๋ฐ˜ํ–ˆ์„ ๋•Œ ์„ค์ •ํ•œ ์ด๋ฆ„์„ ์ถœ๋ ฅํ•ด์คŒ. ์ง๊ด€์ ์œผ๋กœ ์–ด๋–ค constraint์ธ์ง€ ์•Œ๋ ค์ค„ ์ˆ˜ ์žˆ์–ด์„œ ์ข‹์Œ

    • ์ถœ๋ ฅ : Check constraint 'age_over_20' is violated

    • ์„ค์ • ์•ˆํ•˜๋ฉด : Check constraint 'test_chk_1' is violated

schema ๋ณ€๊ฒฝํ•˜๊ธฐ ALTER TABLE

๋ฌธ๋ฒ•

  • ALTER TABLE <ํ…Œ์ด๋ธ”๋ช…> <๋ญํ•ด์ค„์ง€>

  • ์‚ฌ์šฉํ•˜๋ ค๋Š” RDBMS์˜ ๋ฌธ์„œ๋ฅผ ์ฐธ๊ณ ํ•  ๊ฒƒ

ํ…Œ์ด๋ธ” ์‚ญ์ œ

๋ฌธ๋ฒ•

  • DROP TABLE <ํ…Œ์ด๋ธ” ๋ช…>

  • DROP TABLE table_name

์ฃผ์˜์‚ฌํ•ญ

  • ์ด๋ฏธ ์„œ๋น„์Šค ์ค‘์ธ table์˜ schema๋ฅผ ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด๋ผ๋ฉด, ๋ณ€๊ฒฝ ์ž‘์—… ๋•Œ๋ฌธ์— ์„œ๋น„์Šค์˜ ๋ฐฑ์—”๋“œ์— ์˜ํ–ฅ์ด ์—†์„์ง€ ์ถฉ๋ถ„ํžˆ ๊ฒ€ํ† ํ•œ ํ›„์— ๋ณ€๊ฒฝํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”

  • ๋งŒ๋“ค๋ ค๋Š” ์„œ๋น„์Šค์˜ ์ŠคํŽ™๊ณผ ๋ฐ์ดํ„ฐ ์ผ๊ด€์„ฑ, ํŽธ์˜์„ฑ, ํ™•์ •์„ฑ ๋“ฑ์„ ์ข…ํ•ฉ์ ์œผ๋กœ ๊ณ ๋ คํ•˜์—ฌ DB ์Šคํ‚ค๋งˆ๋ฅผ ์ ์ ˆํ•˜๊ฒŒ ์ •์˜ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”. SQL๋ฌธ์„ ๋ฌดํ„ฑ๋Œ€๋กœ ๋ง‰ ์„ค๊ณ„ํ•˜๋‹ค๊ฐ„ ํฐ์ฝ”๋‹ค์ณ~

์ฐธ๊ณ 

Last updated