๋ฐ์ดํฐ: ํ์ค ์ธ๊ณ์์ ์์ง๋ ๋จ์ํ ์ฌ์ค๊ณผ ๊ฐ๋ค์ ๋ชจ์ ๋์ ๊ฒ
์ ๋ณด: ๋ฐ์ดํฐ๋ฅผ ํน์ ๋ชฉ์ ์ ์ํด ํด์ํ๊ฑฐ๋ ๊ฐ๊ณตํ ํํ
๐ฑ ๋ฐ์ดํฐ๋ฒ ์ด์ค( database ): ๋ฐ์ดํฐ๋ค์ ์งํฉ
ํ ์กฐ์ง ์์์ ์ฌ๋ฌ ์ฌ์ฉ์์ ์์ฉ ํ๋ก๊ทธ๋จ์ด ๊ณต๋์ผ๋ก ์ฌ์ฉํ๋ ๋ฐ์ดํฐ๋ค์ ํตํฉํ์ฌ ์ ์ฅํ๊ณ ์ด์ํ๋ ๋ฐ์ดํฐ
ํ์ผ ์ฒ๋ฆฌ ์์คํ
์ ํ๊ณ
๋ฐ์ดํฐ๋ฒ ์ด์ค ๊ฐ์
๋ฐ์ดํฐ๋ฒ ์ด์ค ์ข
๋ฅ
๐ฑ
RDB( Relational Database ): ๊ด๊ณํ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก SQL์ ์ด์ฉํด ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌ
NoSQL( Not only SQL ): ๋ฐ์ดํฐ ๊ฐ์ ๊ด๊ณ๋ฅผ ์ ์ํ์ง ์๊ณ RDB๋ณด๋ค ์ ์ฐํ ๋ชจ๋ธ์ ์ด์ฉ
RDBM( ๊ด๊ณํ ๋ฐ์ดํฐ๋ฒ ์ด์ค )
NoSQL
RDB vs NoSQL
RDB | NoSQL |
---|---|
ํ๊ณผ ์ด๋ก ๊ตฌ์ฑ๋ ํ ์ด๋ธ๋ก ๋ฐ์ดํฐ ํํ | ๋ฐ์ดํฐ ํํ ๋ฐฉ์์ด ๊ณ ์ ์ ์ด์ง ์์ |
๊ด๊ณ ๋ชจ๋ธ์ ๊ธฐ๋ฐ์ผ๋ก ๋ฐ์ดํฐ ์ ๋ฆฌ | ์ผ๋ฐ์ ์ผ๋ก ๋์ฉ๋์ ๋ฐ์ดํฐ๋ฅผ RDB๋ณด๋ค ๋น ๋ฅด๊ฒ ์ฒ๋ฆฌ ๊ฐ๋ฅ |
๋ฐ์ดํฐ์ ๋ฌด๊ฒฐ์ฑ๊ณผ ์์ ์ฑ์ด ์ค์ํ ๊ฒฝ์ฐ ์ฌ์ฉ | ๋ฐ์ดํฐ์ ๊ตฌ์กฐ๊ฐ ์ผ๊ด์ ์ด์ง ์์ ๋น ๋ฐ์ดํฐ ์ฒ๋ฆฌํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ |
MySQL, PostgreSQL, MariaDB ๋ฑ | MongoDB, Redis, Apache Cassandra ๋ฑ |
๊ด๊ณํ ๋ฐ์ดํฐ ๋ฒ ์ด์ค ๊ตฌ์ฑ ์์
๐ฑ ๊ด๊ณ ? ๊ด๊ณ๊ฐ ์๋ค๋ฉด ํ๋์ ์์ฑ์ผ๋ก ํ ์ด๋ธ์ ์ฐ๊ฒฐํ์ฌ ๋ฐ์ดํฐ ์ค๋ณต ์ ์ฅํ์ง ์๊ณ ํจ๊ณผ์ ์ผ๋ก ๊ด๋ฆฌ !
!
MySQL
๋ฐ์ดํฐ ํ์
์๋ฃํ | ์๋ฏธ |
---|---|
VARCHAR(n) | nBytes ํฌ๊ธฐ์ ๊ฐ๋ณ ๊ธธ์ด ๋ฌธ์์ด ๋ฐ์ดํฐ |
INT | ์ ์ํ ์ซ์ ๋ฐ์ดํฐ( 4Bytes ) |
FLOAT | 4Bytes ํฌ๊ธฐ์ ๋ถ๋ ์์์ ๋ฐ์ดํฐ |
DATETIME | ๋ ์ง์ ์๊ฐ ํํ์ ๊ธฐ๊ฐ ๋ฐ์ดํฐ( YYYY-MM-DD HH:MM:SS ) |
โฆ | โฆ |
โ MySQL ๋ฐ์ดํฐํ์ ๋ค ํ์ธํ๊ธฐ
ํ
์ด๋ธ ์ ์
-- CREATE TABLE ํ
์ด๋ธ๋ช
(์์ฑ1 ๋ฐ์ดํฐํ์
1 ์ ์ฝ์กฐ๊ฑด1, ์์ฑ2 ๋ฐ์ดํฐํ์
2 ์ ์ฝ์กฐ๊ฑด2, ...);
CREATE TABLE customer(
id VARCHAR(10),
name VARCHAR(10),
address VARCHAR(30)
);
์ ์ํ ํ
์ด๋ธ ํ์ธ
SHOW TABLES; -- ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ํ
์ด๋ธ ๋ชฉ๋ก์ ํ์ธ
DESC ํ
์ด๋ธ๋ช
; -- ํ
์ด๋ธ์ ๊ตฌ์กฐ๋ฅผ ํ์ธ
ํ
์ด๋ธ ์์
-- ์ปฌ๋ผ ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD COLUMN ์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
์ ์ฝ์กฐ๊ฑด;
-- ์ปฌ๋ผ ์์
ALTER TABLE ํ
์ด๋ธ๋ช
MODIFY COLUMN ์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
์ ์ฝ์กฐ๊ฑด;
-- ์ปฌ๋ผ ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE ํ
์ด๋ธ๋ช
CHANGE COLUMN ๊ธฐ์กด์ปฌ๋ผ๋ช
์๋ก์ด์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
์ ์ฝ์กฐ๊ฑด;
-- ์ปฌ๋ผ ์ญ์
ALTER TABLE ํ
์ด๋ธ๋ช
DROP COLUMN ์ปฌ๋ผ๋ช
๋ฐ์ดํฐํ์
์ ์ฝ์กฐ๊ฑด;
-- ํ
์ด๋ธ ์ด๋ฆ ๋ณ๊ฒฝ
ALTER TABLE ๊ธฐ์กดํ
์ด๋ธ๋ช
RENAME ์๋ก์ดํ
์ด๋ธ๋ช
;
ํ
์ด๋ธ ์ญ์
DROP TABLE ํ
์ด๋ธ๋ช
;
์ ์ฝ์กฐ๊ฑด
NOT NULL
: NULL
๊ฐ ๋นํ์ฉ, ๋ฐ์ดํฐ๋ฅผ ์
๋ ฅํ์ง ์์ผ๋ฉด ์๋ฌ ๋ฐ์UNIQUE
: ์ค๋ณต ๊ฐ ํ์ฉ X, ๋๊ฐ์ ๊ฐ์ด ์์ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์, NULL
์ ๋น๊ต ๋ถ๊ฐํ๋ฏ๋ก ์ค๋ณต ๊ฐ๋ฅDEFAULT
: ๊ธฐ๋ณธ๊ฐ ์ค์ , ์๋ฌด๋ฐ ๊ฐ์ ์ง์ ํ์ง ์์ ๊ฒฝ์ฐ DEFAULT
๊ฐ์ผ๋ก ์ค์ CHECK
: ๊ฐ์ ๋ฒ์๋ฅผ ์ ํํ์ฌ ํน์ ๊ฐ๋ง ํ์ฉ, ์ ํํ ๊ฐ์ด ์๋ ๊ฒฝ์ฐ ์๋ฌ ๋ฐ์CONSTRAINT
:// ์ ์ฝ ์กฐ๊ฑด ์ด๋ฆ ์ ์
CONSTRAINT ์ ์ฝ์กฐ๊ฑด์ด๋ฆ ์ ์ฝ์กฐ๊ฑด[UNIQUE, CHECK, ...] (์ ์ฉํ ์์ฑ);
// ์์ฑ๋ ์ ์ฝ ์กฐ๊ฑด ํ์ธ
SELECT * FROM information_schema.table_constraints;
// ์ ์ฝ ์กฐ๊ฑด ์ถ๊ฐ
ALTER TABLE ํ
์ด๋ธ๋ช
ADD CONSTRAINT ์ ์ฝ์กฐ๊ฑด ์ด๋ฆ ์ ์ฝ์กฐ๊ฑด(์์ฑ);
// DEFAULT ์ ์ฝ ์กฐ๊ฑด ์์
ALTER TABLE ํ
์ด๋ธ๋ช
ALTER ์์ฑ SET DEFAULT ๊ธฐ๋ณธ๊ฐ;
KEY
Primary Key ( ๊ธฐ๋ณธํค )
๐ฑ ์๋ก ๋ค๋ฅธ ํํ์ ์ ์ผํ๊ฒ ์๋ณํ ์ ์๋ ๊ธฐ์ค์ด ๋๋ ์์ฑ
PRIMARY KEY
NULL
๊ฐ ๊ฐ์ง ์ ์์Foreign Key ( ์ธ๋ํค )
๐ฑ ๋ค๋ฅธ ํ ์ด๋ธ์ ๊ธฐ๋ณธํค๋ฅผ ์ฐธ์กฐํ๋ ์์ฑ์ผ๋ก ํ ์ด๋ธ์ ๊ด๊ณ ์ ์
FOREIGN KEY (์ฐธ์กฐํ ์์ฑ) REFERENCES ์ฐธ์กฐ๋๋ ํ
์ด๋ธ(์ฐธ์กฐ๋๋ ์์ฑ)
Composite Key ( ๋ณตํฉํค )
๐ฑ ๋ ๊ฐ ์ด์์ ์์ฑ(์ปฌ๋ผ)์ ๊ฒฐํฉํ์ฌ ๊ณ ์ ํ ๊ฐ์ ๋ง๋๋ ๋ฐฉ์์ผ๋ก ํ ์ด๋ธ์ ๋ฐ์ดํฐ ๋ฌด๊ฒฐ์ฑ ์ ์ง
PRIMARY KEY (์์ฑ1, ์์ฑ2, ...)
CREATE TABLE customer(
id VARCHAR(10) PRIMARY KEY, // ๊ธฐ๋ณธํค ์ค์
name VARCHAR(10),
address VARCHAR(30)
);
CREATE TABLE oreder_history(
customer_id VARCHAR(10),
order_id VARCHAR(14),
FOREIGN KEY (customer_id) REFERENCES customer(id), // ์ธ๋ํค ์ค์
CONSTAINT order_history_pk PRIMARY KEY (customer_id, order_id) // ๋ณตํฉํค ์ค์
);
๊ทธ ์ธ์ ํค
๋ฌด๊ฒฐ์ฑ ์ ์ฝ ์กฐ๊ฑด
๐ฑ ๊ฐ์ฒด ๋ฌด๊ฒฐ์ฑ: ๊ธฐ๋ณธํค๋
NULL
๊ฐ์ด๋ ์ค๋ณต๋ ๊ฐ์ ๊ฐ์ง ์ ์์
์ฐธ์กฐ ๋ฌด๊ฒฐ์ฑ: ์ธ๋ํค๋NULL
์ด๊ฑฐ๋ ์ฐธ์กฐ๋๋ ๋ฆด๋ ์ด์ ์ ๊ธฐ๋ณธํค ๊ฐ๊ณผ ๋์ผ
NULL
๋ฌด๊ฒฐ์ฑ: ํน์ ์์ฑ๊ฐ์ NULL ๊ฐ์ ๊ฐ์ง ์ ์์( NOT NULL
)๋ฐ์ดํฐ ๋ชจ๋ธ๋ง
๐ฑ ํ์ค ์ธ๊ณ์ ์กด์ฌํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์คํ ํ๋ ๊ณผ์
๋ฐ์ดํฐ ๋ชจ๋ธ์ ๊ตฌ์ฑ ์์
๐ฑ ํ์ค ์ธ๊ณ์ ๋ฐ์ดํฐ๋ฅผ ๋จ์ํ, ์ถ์ํํ์ฌ ํํํ ๋ชจ๋ธ
๋ฐ์ดํฐ ๋ชจ๋ธ๋ง ๋จ๊ณ
๐ฑ ERD, Entity-Relationship Diagram ( ๊ฐ์ฒด-๊ด๊ณ ๋ค์ด์ด๊ทธ๋จ )