๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์‹œ๋„/๊ตญ๋น„์ง€์›

[D+30] DB ์™ธ๋ž˜ํ‚ค, ๊ทธ๋ฃนํ•‘, DB๊ฐœ๋…

by ๐Ÿ‡๋ฐ•๋ด‰๋ด‰๐Ÿ‡ 2022. 11. 3.

 

 

๊ตญ๋น„์ง€์› D+30

-  DB ์™ธ๋ž˜ํ‚ค, ๊ทธ๋ฃนํ•‘, DB๊ฐœ๋… -

 


 

DB ์™ธ๋ž˜ํ‚ค

์™ธ๋ž˜ํ‚ค๋Š” ๋‚ด ํ…Œ์ด๋ธ”๊ณผ ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์„ ์—ฐ๊ฒฐํ•ด์ฃผ๋Š” ๋‹ค๋ฅธ ํ…Œ์ด๋ธ”์˜ ํ‚ค์ด๋‹ค.

๋งŒ์•ฝ ์™ธ๋ž˜ํ‚ค๊ฐ€ ์—†์„ ๊ฒฝ์šฐ ๋ถˆํ•„์š”ํ•œ ์ •๋ณด๊ฐ€ ๋งŽ์•„์งˆ ์ˆ˜ ์žˆ์œผ๋ฉฐ, ์ถ”ํ›„์— ์ˆ˜์ •๋œ ๋ฐ์ดํ„ฐ๋กœ์ธํ•ด ๋ฐ์ดํ„ฐ ๋ถˆ์ผ์น˜๊ฐ€ ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค.

ํ…Œ์ด๋ธ”์„ ๋ฌดํ„ฑ๋Œ€๊ณ  ๋งŒ๋“ค๊ฒŒ ๋  ๊ฒฝ์šฐ ๊ณต๊ฐ„๋‚ญ๋น„์™€ ๋ฐ์ดํ„ฐ์˜ ๊ฒฐํ•จ์ด ๋ฐœ์ƒ๋  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

 

๊ทธ๋ ‡๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ž˜ํ‚ค๋ฅผ ์‚ฌ์šฉํ•˜๊ฒŒ ๋˜๋ฉด ์ค‘๋ณต์„ ์ตœ์†Œํ™”ํ•˜๊ณ  ๋ฐ์ดํ„ฐ์˜ ๋ฌด๊ฒฐ์„ฑ์„ ์ง€ํ‚ฌ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์™ธ๋ž˜ํ‚ค์˜ ์กด์žฌ๋Š” ๋งค์šฐ ์ค‘์š”ํ•˜๋‹ค.

 

-- ํ…Œ์ด๋ธ” ์ƒ์„ฑ
create table usertbl 					-- ํšŒ์›ํ…Œ์ด๋ธ”
(
	userID char(20) not null primary key,		
    	name varchar(20) not null,			
    	birthYear int not null,				
    	addr char(2) not null,				
	mobile1 char(3),				
    	mobile2 char(8),				
    	height smallint,				
    	mDate date					
);

create table buytbl					-- ๊ตฌ๋งคํ…Œ์ด๋ธ”
(
	num int not null primary key auto_increment,	
   	userID char(20) not null,			
    	prodName varchar(20) not null,			
    	groupName char(4),				
    	price int not null,				
    	amount smallint not null,			
        
        -- usertbl์˜ userID(์™ธ๋ž˜ํ‚ค)๋ฅผ ํ†ตํ•ด buytbl์„ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ๋‹ค. 
    	foreign key (userID) references usertbl(userID)
);

 


DB ๊ทธ๋ฃนํ•‘

• group by

- ์กฐํšŒ ๊ฒฐ๊ณผ๋ฅผ ํŠน์ • ๊ธฐ์ค€์œผ๋กœ ๊ทธ๋ฃนํ•‘์„ ์ˆ˜ํ–‰

- where์ ˆ ๋‹ค์Œ์— ์œ„์น˜

- ์ง‘๊ณ„ํ•จ์ˆ˜ : AVG(), MIN(), MAX(), COUNT()

 

• having

group by์™€ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋Š” ์กฐ๊ฑด์ ˆ๋กœ ๊ธฐ์กด์— ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š” where์ ˆ ๊ฐ™์€ ๊ฒฝ์šฐ where์ ˆ์˜ ๋Œ€์ƒ์€ ํ…Œ์ด๋ธ”๋กœ ์กฐ๊ฑด์— ์„ฑ๋ฆฝ๋˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๋ฝ‘์•„๋‚ด์ง€๋งŒ group by๋ฅผ ์‚ฌ์šฉํ•ด์„œ ์ง‘๊ณ„ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ ๋Œ€์ƒ์ด ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ ์ง‘๊ณ„ํ•จ์ˆ˜์˜ ๊ฒฐ๊ณผ๋ฌผ๋‚ด์—์„œ ๋ฝ‘์•„๋‚ด๊ธฐ ๋•Œ๋ฌธ์— having์„ ์‚ฌ์šฉํ•ด์ค€๋‹ค.

-- ์‚ฌ์šฉ์ž๋ณ„๋กœ 1000์› ์ด์ƒ ์‚ฐ ์‚ฌ๋žŒ์˜ ์ด ๊ตฌ๋งค์•ก์„ ์กฐํšŒํ•œ๋‹ค.
select userID, sum(price*amount) as '๊ตฌ๋งค์ดํ•ฉ'
from buytbl
group by userID
having sum(price*amount) > 1000;

 


DB ๊ฐœ๋…

• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ •์˜

- ํ†ตํ•ฉ๋ฐ์ดํ„ฐ : ๋ฐ์ดํ„ฐ๋ฅผ ํ†ตํ•ฉ์‹œ์ผœ์„œ ์ค‘๋ณต์„ ์—†์•ค๋‹ค. (๋ฐ์ดํ„ฐ ์ตœ์†Œํ™”)

- ๊ณต์šฉ๋ฐ์ดํ„ฐ : ์—ฌ๋Ÿฌ ์กฐ์ง, ์‚ฌ์šฉ์ž๊ฐ€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ณต์œ ํ•œ๋‹ค.

- ์šด์˜๋ฐ์ดํ„ฐ : ์กฐ์ง์ด ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค.

- ์ €์žฅ๋ฐ์ดํ„ฐ : ๋ฐ์ดํ„ฐ๋Š” ์ €์žฅ๋˜์–ด์•ผ ํ•œ๋‹ค.

 

• ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ํŠน์ง•

โ‘  ์‹ค์‹œ๊ฐ„ ์ ‘๊ทผ์„ฑ

- ์š”์ฒญ๋ฐ›์€ ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ๋Š” ์‹ค์‹œ๊ฐ„์œผ๋กœ ์ฒ˜๋ฆฌ๋˜๊ณ  ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ด์•ผ ํ•œ๋‹ค.

- ์ด๋•Œ ์ปดํ“จํ„ฐ์—์„œ์˜ ์‹ค์‹œ๊ฐ„์ด๋ž€, ๋ช…๋ น์„ ๋‚ด๋ฆฐ ์ฆ‰์‹œ ์ฒ˜๋ฆฌ๋˜๋Š” ๊ฒƒ์ด ์•„๋‹ˆ๋ผ ์ž์›์ด ํ•œ์ „๋˜์–ด ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ์ž‘์—… ์ˆ˜ํ–‰์ด ์š”์ฒญ๋˜์—ˆ์„ ๋•Œ, ์ด๋ฅผ ์ œํ•œ๋œ ์‹œ๊ฐ„์•ˆ์— ์ฒ˜๋ฆฌํ•ด ๊ฒฐ๊ณผ๋ฅผ ๋‚ด์ฃผ๋Š” ๊ฒƒ์„ ๋งํ•œ๋‹ค.

(์ฆ‰, ์ •ํ•ด์ง„ ์‹œ๊ฐ„์•ˆ์—๋งŒ ์ฒ˜๋ฆฌ๋˜๋ฉด ๋ฌด์กฐ๊ฑด ์‹ค์‹œ๊ฐ„์ด๋ผ๋Š” ์˜๋ฏธ์ด๋‹ค)

(์šด์˜์ฒด์ œ๋Š” ๊ธฐ์ค€์ด ์—†๊ธฐ๋•Œ๋ฌธ์— ์‹ค์‹œ๊ฐ„์ด๋ผ๊ณ  ํ•  ์ˆ˜ ์—†๋‹ค)

 

โ‘ก ๊ณ„์†์  ๋ณ€ํ™”

- ์ €์žฅ๋œ ๋ฐ์ดํ„ฐ๋Š” ์ž…๋ ฅ, ์ˆ˜์ •, ์‚ญ์ œ์— ์˜ํ•ด ์ง€์†์ ์œผ๋กœ ๋ณ€ํ™”ํ•œ๋‹ค.

 

โ‘ข ๋™์‹œ๊ณต์šฉ (Concurrent Sharing)

- ์„œ๋กœ ๋‹ค๋ฅธ ๋ชฉ์ ์˜ ์‘์šฉ SW ๋ฐ ์‚ฌ์šฉ์ž์— ์˜ํ•ด ๋™์‹œ ๊ณต์šฉ์ด ๊ฐ€๋Šฅํ•˜๋‹ค.

 

- Concurrent : ๋™์‹œ์— ์‹คํ–‰๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ (๋ณ‘ํ–‰์„ฑ)

- Parallel : ๋™์‹œ์— ์ž‘์—…์ด ์ฒ˜๋ฆฌ๊ฐ€ ๋˜๋Š” ๊ฒƒ (๋ณ‘๋ ฌ์„ฑ)

(๋™์‹œ์— ๋Œ€ํ•œ ์˜๋ฏธ๊ฐ€ ์ฐจ์ด๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์ž˜ ๊ตฌ๋ถ„ํ•˜๋„๋ก ํ•œ๋‹ค)

 

 

โ‘ฃ ๋‚ด์šฉ์— ์˜ํ•œ ์ฐธ์กฐ

- ๋ฐ์ดํ„ฐ์˜ ์ฐธ์กฐ๋Š” ๋ฐ์ดํ„ฐ์˜ ์ฃผ์†Œ๊ฐ€ ์•„๋‹Œ ์ €์žฅ๋œ ๊ฐ’์— ์˜ํ•ด ์ฒ˜๋ฆฌ๋œ๋‹ค.

 

• ์Šคํ‚ค๋งˆ

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค, ํ…Œ์ด๋ธ”, ๋ทฐ๋“ฑ์„ ๋งŒ๋“ค๊ธฐ ์œ„ํ•œ ๊ธฐ๋ฐ˜์ด ๋˜๋Š” ๋ฐ์ดํ„ฐ์ง‘ํ•ฉ, ๊ทœ์น™

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๊ตฌ์กฐ์™€ ์ œ์•ฝ ์กฐ๊ฑด์— ๊ด€ํ•œ ์ „๋ฐ˜์ ์ธ ๋ช…์„ธ๋ฅผ ๊ธฐ์ˆ ํ•œ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ์˜ ์ง‘ํ•ฉ

 

์Šคํ‚ค๋งˆ 3๊ณ„์ธต

โ‘  ์™ธ๋ถ€์Šคํ‚ค๋งˆ(External Schema) = ์‚ฌ์šฉ์ž ๋ทฐ(View)

- ์‚ฌ์šฉ์ž๋‚˜ ์‘์šฉํ”„๋กœ๊ทธ๋ž˜๋จธ๊ฐ€ ๊ฐ ๊ฐœ์ธ์˜ ์ž…์žฅ์—์„œ ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ๋…ผ๋ฆฌ์  ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.

- ์ „์ฒด ๋ฐ์ด์Šค๋ฒ ์ด์Šค์˜ ํ•œ ๋…ผ๋ฆฌ์ ์ธ ๋ถ€๋ถ„์œผ๋กœ ๋ณผ ์ˆ˜ ์žˆ์–ด ์„œ๋ธŒ ์Šคํ‚ค๋งˆ๋ผ๊ณ ๋„ ํ•œ๋‹ค.

- ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์งˆ์˜์–ด(SQL)๋ฅผ ์ด์šฉํ•˜์—ฌ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์‰ฝ๊ฒŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

โ‘ก ๊ฐœ๋…์Šคํ‚ค๋งˆ(Conceptual Schema) = ์ „์ฒด์ ์ธ ๋ทฐ(View)

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ „์ฒด์ ์ธ ๋…ผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋กœ์„œ, ๋ชจ๋“  ์‘์šฉํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ์‚ฌ์šฉ์ž๋“ค์ด ํ•„์š”๋กœ ํ•˜๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ข…ํ•ฉํ•œ ์กฐ์ง ์ „์ฒด์˜ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋กœ ํ•˜๋‚˜๋งŒ ์กด์žฌํ•œ๋‹ค.

- ๊ฐœ์ฒด๊ฐ„์˜ ๊ด€๊ณ„์™€ ์ œ์•ฝ ์กฐ๊ฑด์„ ๋‚˜ํƒ€๋‚ด๊ณ  ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์˜ ์ ‘๊ทผ ๊ถŒํ•œ, ๋ณด์•ˆ ๋ฐ ๋ฌด๊ฒฐ์„ฑ ๊ทœ์น™์— ๊ด€ํ•œ ๋ช…์„ธ๋ฅผ ์ •์˜ํ•œ๋‹ค.

- ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ํŒŒ์ผ์— ์ €์žฅ๋˜๋Š” ๋ฐ์ดํ„ฐ์˜ ํ˜•ํƒœ๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ๋‹จ์ˆœํžˆ ์Šคํ‚ค๋งˆ๋ผ๊ณ  ํ•˜๋ฉด ๊ฐœ๋… ์Šคํ‚ค๋งˆ๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

- ๊ธฐ๊ด€์ด๋‚˜ ์กฐ์ง์ฒด์˜ ๊ด€์ ์—์„œ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ์ •์˜ํ•œ ๊ฒƒ์ด๋‹ค.

 

โ‘ข ๋‚ด๋ถ€์Šคํ‚ค๋งˆ(Internal Schema) = ์ €์žฅ ์Šคํ‚ค๋งˆ(Storage Schema)

- ๋ฌผ๋ฆฌ์ ์ธ ์ €์žฅ์žฅ์น˜์— ๋ฐ์ดํ„ฐ๋ฅผ ์–ด๋–ป๊ฒŒ ์ €์žฅํ• ๊ฒƒ์ธ๊ฐ€์— ๋Œ€ํ•œ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

- ์‹ค์ œ๋กœ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋  ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์ ์ธ ๊ตฌ์กฐ๋ฅผ ์ •์˜ํ•˜๊ณ , ์ €์žฅ ๋ฐ์ดํ„ฐ ํ•ญ๋ชฉ์˜ ํ‘œํ˜„๋ฐฉ๋ฒ•, ๋‚ด๋ถ€ ๋ ˆ์ฝ”๋“œ์˜ ๋ฌผ๋ฆฌ์  ์ˆœ์„œ ๋“ฑ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

• ํŠœํ”Œ

- ํ…Œ์ด๋ธ”์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋กœ row๋ฅผ ํŠœํ”Œ์ด๋ผ๊ณ  ํ•œ๋‹ค.

 

ํŠœํ”Œ์˜ ํŠน์„ฑ

- ํŠœํ”Œ์˜ ์œ ์ผ์„ฑ : ๊ฐ™์€ ํŠœํ”Œ์€ ์กด์žฌํ•˜์ง€ ์•Š๋Š”๋‹ค. → ํ‚ค(key)๋ฅผ ๊ฐ€์ง„๋‹ค.

- ํŠœํ”Œ์˜ ๋ฌด์ˆœ์„œ์„ฑ : ๊ธฐ์กด์˜ ํŠœํ”Œ์€ ์ˆœ์„œ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€ ์•Š๋Š”๋‹ค.

 

• ํ‚ค (key)

- ํŠœํ”Œ์„ ๊ตฌ๋ถ„ํ•˜๊ธฐ ์œ„ํ•œ ๊ฐ’

 

โ‘  ํ›„๋ณดํ‚ค (Candidate Key)

- ๋ฆด๋ ˆ์ด์…˜์„ ๊ตฌ์„ฑํ•˜๋Š” ์†์„ฑ๋“ค์ค‘ ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ๋“ค์˜ ๋ถ€๋ถ„์ง‘ํ•ฉ์„ ์˜๋ฏธํ•œ๋‹ค.

- ๋ชจ๋“  ๋ฆด๋ ˆ์ด์…˜์€ ํ•˜๋‚˜ ์ด์ƒ์˜ ํ›„๋ณดํ‚ค๋ฅผ ๊ฐ€์ ธ์•ผ ํ•œ๋‹ค.

- ์œ ์ผ์„ฑ๊ณผ ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•ด์•ผ ํ•œ๋‹ค.

 

โ‘ก ๊ธฐ๋ณธํ‚ค (Primary Key)

- ํ›„๋ณดํ‚ค ์ค‘์—์„œ ์„ ํƒํ•œ ๋ฉ”์ธํ‚ค์ด๋‹ค.

- ํŠœํ”Œ์„ ์œ ์ผํ•˜๊ฒŒ ๊ตฌ๋ถ„ํ•  ์ˆ˜ ์žˆ๋Š” ์†์„ฑ์œผ๋กœ Null๊ฐ’์„ ๊ฐ€์งˆ ์ˆ˜ ์—†๋‹ค.

- ํ†ต์ผํ•œ ๊ฐ’์ด ์ค‘๋ณต๋˜์–ด ์ €์žฅ ๋  ์ˆ˜ ์—†๋‹ค.

 

โ‘ข ๋Œ€์ฒดํ‚ค (Alternate Key)

- ํ›„๋ณดํ‚ค๊ฐ€ ๋‘˜ ์ด์ƒ์ผ ๋•Œ ๊ธฐ๋ณธํ‚ค๋ฅผ ์ œ์™ธํ•œ ๋‚˜๋จธ์ง€ ํ›„๋ณดํ‚ค๋ฅผ ๋‚˜ํƒ€๋‚ธ๋‹ค.

 

โ‘ฃ ์Šˆํผํ‚ค (Super Key)

- ํ•œ ๋ฆด๋ ˆ์ด์…˜ ๋‚ด์— ์žˆ๋Š” ์†์„ฑ๋“ค์˜ ์ง‘ํ•ฉ์œผ๋กœ ๊ตฌ์„ฑ๋œ ํ‚ค์ด๋‹ค.

- ์œ ์ผ์„ฑ์€ ๋งŒ์กฑํ•˜์ง€๋งŒ ์ตœ์†Œ์„ฑ์„ ๋งŒ์กฑํ•˜์ง€ ๋ชปํ•œ๋‹ค.

 

โ‘ค ์™ธ๋ž˜ํ‚ค (Foreign Key)

- ์ฐธ์กฐ๋˜๋Š” ๋ฆด๋ ˆ์ด์…˜์˜ ๊ธฐ๋ณธํ‚ค์™€ ๋Œ€์‘๋˜์–ด ๋ฆด๋ ˆ์ด์…˜ ๊ฐ„์— ์ฐธ์กฐ ๊ด€๊ณ„๋ฅผ ํ‘œํ˜„ํ•˜๋Š” ๋„๊ตฌ์ด๋‹ค.

(์™ธ๋ž˜ํ‚ค๋Š” ์ผ์ข…์˜ ์ œ์•ฝ์กฐ๊ฑด์ด์ง€ ํ‚ค๋ผ๊ณ  ๋ณด๊ธฐ ์–ด๋ ต๋‹ค)

- ์™ธ๋ž˜ํ‚ค๋กœ ์ง€์ •๋˜๋ฉด ์ฐธ์กฐ ํ…Œ์ด๋ธ”์˜ ๊ธฐ๋ณธํ‚ค์— ์—†๋Š” ๊ฐ’์€ ์ž…๋ ฅํ•  ์ˆ˜ ์—†๋‹ค.

 

 

๋ฐ˜์‘ํ˜•

๋Œ“๊ธ€