#3 Data Definition Language

#3.0 Intoduction

์ฃผ์„ ์ถ”๊ฐ€

-- < ํ•œ์ค„ ์ฃผ์„

/*
    ์—ฌ๋Ÿฌ์ค„ ์ฃผ์„
*/

SQL ๋ช…๋ น์–ด

  • ๋Œ€/์†Œ๋ฌธ์ž ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š์Œ

  • SQL ์ฟผ๋ฆฌ ๋ ์„ธ๋ฏธ์ฝœ๋ก  ; ๋ถ™์ด๊ธฐ

DDL (Data Definition Language) : ๋ฐ์ดํ„ฐ ์ •์˜ ์–ธ์–ด

#3.1 Tables

ํ…Œ์ด๋ธ” : ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋ชจ๋“  ๋ฐ์ดํ„ฐ๋ฅผ ํฌํ•จํ•˜๋Š” ํ…Œ์ดํ„ฐ๋ฒ ์ด์Šค ๊ฐ์ฒด ์Šคํ”„๋ ˆ๋“œ์‹œํŠธ์™€ ์œ ์‚ฌํ•œ ํ–‰-์—ด ํ˜•์‹์œผ๋กœ ๊ตฌ์„ฑ๋˜๋ฉฐ ๊ฐ ํ–‰์€ ๊ณ ์œ ํ•œ ๋ ˆ์ฝ”๋“œ, ๊ฐ ์—ด์€ ๋ ˆ์ฝ”๋“œ์˜ ํ•„๋“œ๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

#3.2 Create Table

CREATE TABLE movies (
	title,
  released,
  overview,
  rating,
  director
);

-- CREATE TABLE - SQLite ์—์„œ ์ƒˆ ํ…Œ์ด๋ธ” ์ƒ์„ฑ์— ์‚ฌ์šฉ๋จ
-- sqlite๋Š” ์ด ์ •๋„๋กœ ์ž‘๋™ํ•จ

#3.3 Insert Into Values

DROP TABLE movies;

-- DROP TABLE ํ…Œ์ด๋ธ” ์ œ๊ฑฐ, ํ™•์ธ ๋ฉ”์‹œ์ง€ ์—†๊ธฐ์— ํ™•์‹ ์„ ๊ฐ–๊ณ  ์‚ฌ์šฉ


INSERT INTO movies VALUES (
    'The Godfather',
    1980,
    'The Best Movie In The World',
    10,
    'F.F.C'
);

-- ํ…Œ์ด๋ธ”์— ๋ฐ์ดํ„ฐ ์ถ”๊ฐ€

#3.4 Insert Into Values (part Two)

์œ„์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ INSERT INTO ๋ฅผ ํ™œ์šฉํ•ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ ๋ฐ˜๋“œ์‹œ ์—ด์˜ ์ˆœ์„œ๋ฅผ ์•Œ์•„์•ผ ํ•จ, null ๊ฐ’์œผ๋กœ ๋‘˜ ์ˆ˜ ์žˆ์ง€๋งŒ ์ด๋Š” ๊ทผ๋ณธ์ ์ธ ํ•ด๊ฒฐ์ด ์•„๋‹˜

INSERT INTO movies (title) VALUES ('TLOTR');

INSERT INTO movies (title, rating) VALUES ('TLOTR 2', 10);

INSERT INTO movies (title, rating,released) VALUES ('TLOTR 3', 10, 2003);

-- ๊ณผ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํŠน์ • ๊ฐ’๋งŒ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Œ, ๊ฐ’์„ ์ง€์ •ํ•˜์ง€ ์•Š์œผ๋ฉด null

INSERT INTO movies (title, rating) VALUES ('ET', 10), ('ET 2', 9);

-- ์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์—ฌ๋Ÿฌ ๋ฐ์ดํ„ฐ ์‚ฝ์ž… ๊ฐ€๋Šฅ

#3.5 Data Types

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ, ๊ฐ ๋ฐ์ดํ„ฐ์˜ ํƒ€์ž…์ด ๋’ค์„ž์ผ ์ˆ˜ ์žˆ์Œ. ์˜ˆ๋ฅผ ๋“ค์–ด title์€ text๊ณ  rating์€ number์ง€๋งŒ ์œ„์™€ ๊ฐ™์ด ๋ฐ์ดํ„ฐ๋ฅผ ์ถ”๊ฐ€ํ•˜๋ฉด title์— ์ˆซ์ž, rating์— text๊ฐ€ ์ถ”๊ฐ€๋˜๋Š”๊ฑธ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์—†์Œ.

๋”ฐ๋ผ์„œ ์•„๋ž˜์™€ ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ํƒ€์ž…์„ ์„ค์ • (Daya Types์€ DB ๋งˆ๋‹ค ๋‹ค๋ฆ„)

CREATE TABLE movies (
    title TEXT,
    released INTEGER, -- 1, 2, 3 ...
    overview TEXT,
    rating REAL, -- 1.2 9.5 ... ์Œ์ˆ˜ x
    director TEXT,
    for_kids INTEGER -- 0 or 1 ... sql์—์„œ๋Š” T/F ์„ค์ • x
    -- poster BLOB -- image but DB์— ์ด๋ฏธ์ง€๋ฅผ ๋„ฃ๋Š”๊ฑด ์•ˆ์ข‹์Œ ์ด๋ฏธ์ง€ ์ฃผ์†Œ๋ฅผ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•
) STRICT; -- ์œ„ ํƒ€์ž…์ด ์•„๋‹ ์‹œ ์˜ค๋ฅ˜

ํ•˜์ง€๋งŒ ์ด๋ ‡๊ฒŒ ํ•ด๋„ ์กฐ๊ธˆ ๋ถ€์กฑํ•จ. rating์„ 10์ ๊นŒ์ง€๋งŒ ์ฃผ๊ณ  ์‹ถ์ง€๋งŒ ๊ทธ ์ด์ƒ๋ถ€ํ„ฐ ์Œ์ˆ˜๊นŒ์ง€ ๋ชจ๋‘ ๊ฐ€๋Šฅ...

#3.6 Constraints

column ์— ์ถ”๊ฐ€๋  ๋ฐ์ดํ„ฐ์— ์ œ์•ฝ ์กฐ๊ฑด์„ ์ค„ ์ˆ˜ ์žˆ์Œ

/*
    UNIQUE ์œ ์ผ๊ฐ’
    NOT NULL null ๊ธˆ์ง€
    DEFAULT ๊ธฐ๋ณธ๊ฐ’
*/

CREATE TABLE movies (
    title TEXT UNIQUE NOT NULL,
    released INTEGER NOT NULL,
    overview TEXT NOT NULL,
    rating REAL NOT NULL,
    director TEXT,
    for_kids INTEGER NOT NULL DEFAULT 0
) STRICT;

/*
    ์ˆœ์„œ์— ์˜ํ–ฅ์„ ๋ฐ›๋Š” ์กฐ๊ฑด๋“ค๋„ ์žˆ๊ธฐ์— ์‹œ๋„ํ•ด๋ณด๊ธฐ
*/

#3.7 CHECK Constraint

๋””ํ…Œ์ผํ•œ ์ œ์•ฝ ์กฐ๊ฑด ์ถ”๊ฐ€

/*
    CHECK () - CHECK ๋’ค ๋‚ด์šฉ์ด ์ฐธ์ธ์ง€ ํ™•์ธ
    BETWEEN A AND B
*/

CREATE TABLE movies (
    title TEXT UNIQUE NOT NULL,
    released INTEGER NOT NULL CHECK (released > 0),
    overview TEXT NOT NULL,
    rating REAL NOT NULL CHECK (rating BETWEEN 0 AND 10),
    director TEXT,
    for_kids INTEGER NOT NULL DEFAULT 0 CHECK (for_kids BETWEEN 0 AND 1)
) STRICT;

#3.8 Recap

+ ๋‚ด์žฅ FUNCTION ์ฐธ๊ณ 

CREATE TABLE movies (
    title TEXT UNIQUE NOT NULL,
    released INTEGER NOT NULL CHECK (released > 0),
    overview TEXT NOT NULL CHECK (LENGTH(overview) <= 100),
    rating REAL NOT NULL CHECK (rating BETWEEN 0 AND 10),
    director TEXT,
    for_kids INTEGER NOT NULL DEFAULT 0 CHECK (for_kids BETWEEN 0 AND 1)
) STRICT;

#3.9 Primary Keys

๊ธฐ๋ณธ ํ‚ค - ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํ…Œ์ด๋ธ”์˜ ๊ฐ ํ–‰/๋ ˆ์ฝ”๋“œ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š” ํ…Œ์ด๋ธ”์˜ ํ•„๋“œ. ๊ณ ์œ ํ•œ ๊ฐ’์ด ํฌํ•จ๋˜์–ด์•ผ ํ•˜๋ฉฐ, ๊ธฐ๋ณธ ํ‚ค ์—ด์€ NULL ๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค. ์—ฌ๋Ÿฌ ํ•„๋“œ๊ฐ€ ํ‚ค๋ณธ ํ‚ค๋กœ ์‚ฌ์šฉ๋˜๋Š” ๊ฒฝ์šฐ ๋ณตํ•ฉ ํ‚ค๋ผ๊ณ  ํ•œ๋‹ค.

๊ธฐ๋ณธ ํ‚ค๋Š” ๋ถˆ๋ณ€ํ•˜๊ณ  ๊ณ ์œ ํ•ด์•ผ ํ•จ

NATURAL PRIMARY KEY - ์ž์—ฐ ๊ธฐ๋ณธํ‚ค, ํ…Œ์ด๋ธ”์˜ ๋ฐ์ดํ„ฐ์—์„œ ํŒŒ์ƒ๋˜์–ด ๊ณ ์œ  ์‹๋ณ„์ž๋กœ ์‚ฌ์šฉํ•˜๋Š” column์„ ์˜๋ฏธ

SURROGATE PRIMARY KEY - ๋Œ€์ฒด ๊ธฐ๋ณธํ‚ค, ์˜๋ฏธ ์—†์ง€๋งŒ ๊ณ ์œ  ์‹๋ณ„์ž๋ฅผ ์œ„ํ•ด ์‚ฌ์šฉํ•˜๋Š” ์ธ์œ„์ ์ธ ์—ด

์ž์—ฐ ๊ธฐ๋ณธํ‚ค๋Š” ์œ ์ง€๊ฐ€ ์–ด๋ ต๊ธฐ์— ๋Œ€์ฒด ๊ธฐ๋ณธํ‚ค ์‚ฌ์šฉ์ด ๊ถŒ์žฅ๋จ

-- ์ž์—ฐ ๊ธฐ๋ณธํ‚ค title
CREATE TABLE movies (
    title TEXT PRIMARY KEY UNIQUE NOT NULL,
    released INTEGER NOT NULL CHECK (released > 0),
    overview TEXT NOT NULL CHECK (LENGTH(overview) <= 100),
    rating REAL NOT NULL CHECK (rating BETWEEN 0 AND 10),
    director TEXT,
    for_kids INTEGER NOT NULL DEFAULT 0 CHECK (for_kids BETWEEN 0 AND 1)
) STRICT;

-- ๋Œ€์ฒด ๊ธฐ๋ณธํ‚ค movieId
CREATE TABLE movies (
    movieId INTEGER NOT NULL PRIMARY KEY,
    title TEXT UNIQUE NOT NULL,
    released INTEGER NOT NULL CHECK (released > 0),
    overview TEXT NOT NULL CHECK (LENGTH(overview) <= 100),
    rating REAL NOT NULL CHECK (rating BETWEEN 0 AND 10),
    director TEXT,
    for_kids INTEGER NOT NULL DEFAULT 0 CHECK (for_kids BETWEEN 0 AND 1)
) STRICT;


-- SQLite_ AUTO INCREMENT ํ•ญ์ƒ ์ƒˆ๋กญ๊ณ  ๊ณ ์œ ํ•œ ๊ธฐ๋ณธํ‚ค ๋ณด์žฅ


PRIMARY KEY & UNIQUE

PRIMARY KEY
UNIQUE

NULL ํ—ˆ์šฉ ์—ฌ๋ถ€

X

O

ํ…Œ์ด๋ธ”๋‹น ๊ฐœ์ˆ˜

1

MANY

INDEX ์ƒ์„ฑ

์ž๋™์œผ๋กœ ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค ์ƒ์„ฑ

NON-ํด๋Ÿฌ์Šคํ„ฐ๋“œ ์ธ๋ฑ์Šค ์ƒ์„ฑ

๋ ˆ์ฝ”๋“œ ์‹๋ณ„

ํ…Œ์ด๋ธ”์ด ๊ฐ ๋ ˆ์ฝ”๋“œ๋ฅผ ๊ณ ์œ ํ•˜๊ฒŒ ์‹๋ณ„ํ•˜๋Š”๋ฐ ์‚ฌ์šฉ

ํŠน์ • ์—ด์˜ ๊ฐ’์ด ๊ณ ์œ ํ•จ์„ ๋ณด์žฅํ•˜์ง€๋งŒ, ๋ฐ˜๋“œ์‹œ ๋ ˆ์ฝ”๋“œ ์‹๋ณ„์šฉ์€ ์•„๋‹˜

์™ธ๋ž˜ ํ‚ค ์ฐธ์กฐ

๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ์™ธ๋ž˜ ํ‚ค๊ฐ€ ์ฐธ์กฐ ๊ฐ€๋Šฅ

์™ธ๋ž˜ ํ‚ค์˜ ์ฐธ์กฐ ๋Œ€์ƒ์ด ๋  ์ˆ˜ ์žˆ์ง€๋งŒ, ์ผ๋ฐ˜์ ์ด์ง€ ์•Š์Œ

๋ณ€๊ฒฝ ๊ฐ€๋Šฅ์„ฑ

์ผ๋ฐ˜์ ์œผ๋กœ ๋ณ€๊ฒฝ ๊ถŒ์žฅ X

์ƒ๋Œ€์ ์œผ๋กœ ๋ณ€๊ฒฝ ์šฉ์ด, ์ฃผ์˜ ํ•„์š”

Last updated

Was this helpful?