๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ/DBMS

DB์„ค๊ณ„) ๋ฐฅ์ง‘ ์ฐพ๋Š” ํ…Œ์ด๋ธ” ์„ค๊ณ„

by HanaV 2023. 4. 10.
728x90

1. ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค ์„ค๊ณ„ํ•˜๊ธฐ

db ์ด๋ฆ„: yummy_db
1) ๋ง›์ง‘ ํ…Œ์ด๋ธ”

์—ด ์ด๋ฆ„ place ๋ฐ์ดํ„ฐํƒ€์ž… ์ตœ๋Œ€ ๊ธธ์ด null ํ—ˆ์šฉ ์—ฌ๋ถ€
์ˆœ๋ฒˆ (PK) num int, auto_increment   x
์‹๋‹น ์ด๋ฆ„ (Unique) place_name char 20 x
์Œ์‹ ์ข…๋ฅ˜ place_kind char 10 (ํ•œ์‹, ์ค‘์‹, ์–‘์‹, ๋ฒ ํŠธ๋‚จ์Œ) x
๊ฑฐ๋ฆฌ (๋„๋ณด) place_howfar tinyint, unsigned   o

๊ฐ€๊นŒ์šด ๊ฑฐ๋ฆฌ์— ์œ„์น˜ํ•œ ๋ง›์ง‘๋งŒ ์ •๋ฆฌํ•  ๊ฒƒ์ด๋ฏ€๋กœ tinyint๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.
2) ์Œ์‹ ํ…Œ์ด๋ธ”

์—ด ์ด๋ฆ„ food ๋ฐ์ดํ„ฐํƒ€์ž… ์ตœ๋Œ€ ๊ธธ์ด null ํ—ˆ์šฉ ์—ฌ๋ถ€
์ˆœ๋ฒˆ (PK) num int, auto_increment   x
์Œ์‹ ์ข…๋ฅ˜ food_kind char 10 x
์Œ์‹ ์ด๋ฆ„ food_name char 20 x
์‹๋‹น ์ด๋ฆ„ (FK) place_name char 20 x
์Œ์‹ ๊ฐ€๊ฒฉ food_price int   x
์Œ์‹ ๋งŒ์กฑ๋„ food_rating tinyint 1์ ~5์  o, 0์  ์ด์ƒ์ด๊ณ  5์ ์ด ๋„˜์ง€ ์•Š๋Š”์ง€ ์ฒดํฌ
๋น„๊ณ  food_memo char 30 o

 
์ตœ์ข…์ ์œผ๋กœ ์ถœ๋ ฅํ•  ํ…Œ์ด๋ธ”์€ ๋ง›์ง‘์˜ ์ด๋ฆ„์„ ์ž…๋ ฅํ•˜๋ฉด ๊ทธ๊ณณ์˜ ์Œ์‹์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋Š” ํ…Œ์ด๋ธ”๊ณผ
์Œ์‹์˜ ์ข…๋ฅ˜๋ฅผ ๋„ฃ์œผ๋ฉด ์Œ์‹์˜ ์ •๋ณด์™€ ๊ทธ ์‹๋‹น์˜ ์ •๋ณด๊ฐ€ ๋‚˜์˜ค๋Š” ํ…Œ์ด๋ธ”์ด๋‹ค.

๋ง›์ง‘ ํ…Œ์ด๋ธ”
์‹๋‹น ์ด๋ฆ„ place_name
์Œ์‹ ์ข…๋ฅ˜ food_kind
๊ฑฐ๋ฆฌ (๋„๋ณด) place_howfar
์Œ์‹ ์ด๋ฆ„ food_name
๊ฐ€๊ฒฉ food_price
๋งŒ์กฑ๋„ (5์ ) food_rating
๋น„๊ณ  food_memo

 

2. ํ…Œ์ด๋ธ” ๋งŒ๋“ค ์ˆœ์„œ ์ •ํ•˜๊ธฐ

food ํ…Œ์ด๋ธ”์€ place ํ…Œ์ด๋ธ”์˜ place_name์„ FK๋กœ ๋ฐ›๊ณ  ์žˆ์œผ๋ฏ€๋กœ place ํ…Œ์ด๋ธ”์„ ๋จผ์ € ๋งŒ๋“ ๋‹ค.
 

3. place ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ

create table place (
	num int not null primary key auto_increment,
    place_name char(20) not null unique,
    place_kind char(10) not null,
    place_howfar tinyint unsigned
);

show columns from place;

insert into place(place_name, place_kind, place_howfar) values ('์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', '์ผ์‹', 5);
insert into place(place_name, place_kind, place_howfar) values ('์ดํ˜„์šฐ์Šค์‹œ', '์ผ์‹', 6);
insert into place(place_name, place_kind, place_howfar) values ('๋ฏธ๋ถ„๋‹น', '๋ฒ ํŠธ๋‚จ์Œ์‹', 5);
insert into place(place_name, place_kind, place_howfar) values ('๋กค๋งํŒŒ์Šคํƒ€', '์–‘์‹', 4);
insert into place(place_name, place_kind, place_howfar) values ('์œก์Œˆ๋ƒ‰๋ฉด', 'ํ•œ์‹', 3);
insert into place(place_name, place_kind, place_howfar) values ('ํ™์ฝฉ๋ฐ˜์ 0410', '์ค‘์‹', 8);
insert into place(place_name, place_kind, place_howfar) values ('ํ‹ธ๋ž€', '๋ฒ ํŠธ๋‚จ์Œ์‹', 6);
insert into place(place_name, place_kind, place_howfar) values ('ํ—ฌ๋กœ๋น„์—ํŠธ', '๋ฒ ํŠธ๋‚จ์Œ์‹', 7);
insert into place(place_name, place_kind, place_howfar) values ('๊น€ํฌ๋ผ ํ•œ๊ตญ์‹์™•๋ˆ๊นŒ์Šค', 'ํ•œ์‹', 8);
insert into place(place_name, place_kind, place_howfar) values ('๊ทธ๋ž˜๋„๊ตญ์ˆ˜', 'ํ•œ์‹', 4);

select * from place;

 

4. food ํ…Œ์ด๋ธ” ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ๋„ฃ๊ธฐ

create table food (
	num int not null primary key auto_increment,
    food_kind char(10) not null,
    food_name char(20) not null,
    place_name char(20) not null,
    food_price int not null,
    food_rating tinyint unsigned check (food_rating <=5),
    food_memo char(30),
    foreign key (place_name) references place(place_name)
);

show columns from food;

insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์˜ฌ๋ฐ”๋ฅธ์ดˆ๋ฐฅ10ps', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 14000, 5, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์ ์‹ฌํŠน์„  ์šฐ๋™์ •์‹', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 9500, 5, '๊ฐ€์„ฑ๋น„ ๊ตฟ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์ ์‹ฌํŠน์„  ๋ชจ๋ฐ€์ •์‹', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 9500, 5, '๊ฐ€์„ฑ๋น„ ๊ตฟ, ์—ฌ๋ฆ„๋ฉ”๋‰ด');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์•Œ๋ฐฅ', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 7000, 5, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', 'ํ‰์ผ ๋Ÿฐ์น˜์ดˆ๋ฐฅ', '์ดํ˜„์šฐ์Šค์‹œ', 12000, 5, '๊ธด๊ผฌ๋ฆฌ์ดˆ๋ฐฅ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', '์Šคํ…Œ์ดํฌ ํ•„๋ผํ”„', '๋กค๋งํŒŒ์Šคํƒ€', 8500, 2, '๋ง›์žˆ๋Š” ๊ณ ๊ธฐ๊ฐ€ ์•„๋‹˜..');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', 'ํ† ๋งˆํ†  ํŒŒ์Šคํƒ€', '๋กค๋งํŒŒ์Šคํƒ€', 5000, 4, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', '๋ฐ”์งˆํŽ˜์Šคํ†  ํฌ๋ฆผ ํŒŒ์Šคํƒ€', '๋กค๋งํŒŒ์Šคํƒ€', 8500, 2, '๋ง›์—†์ง„ ์•Š์€๋ฐ ๊ตณ์ด ๋˜ ๋จน์ง„ ์•Š์„๋“ฏ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ค‘์‹', '์งœ์žฅ๋ฉด', 'ํ™์ฝฉ๋ฐ˜์ 0410', 6500, 3, '๊ทธ๋ƒฅ์งœ์žฅ๋ฉด');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('๋ฐฐํŠธ๋‚จ์Œ์‹', '์–‘์ง€ ์Œ€๊ตญ์ˆ˜', 'ํ‹ธ๋ž€', 9000, 5, '๊ทธ๋ฆ‡์ด ๋งค์šฐ ํผ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('ํ•œ์‹', '์™•๋ˆ๊นŒ์Šค', '๊น€ํฌ๋ผ ํ•œ๊ตญ์‹์™•๋ˆ๊นŒ์Šค', 10000, 4, '์–‘์ด ๋„ˆ๋ฌด ๋งŽ์Œ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('ํ•œ์‹', '์ž”์น˜๊ตญ์ˆ˜', '๊ทธ๋ž˜๋„๊ตญ์ˆ˜', 5000, 4, '');
    
select * from food;

 

5. view ๋งŒ๋“ค๊ณ  ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ

create view find_place
as
select place.place_name, food.food_name, place.place_howfar, food.food_name, food.food_price, food.food_rating, food.food_memo
	from food
    join place
		on place.place_name = food.place_name
	order by food.food_rating desc;
    
 select * from find_place;

 
์ผ์‹ ์ค‘์—์„œ ์ฐพ๊ธฐ

select * from find_place
	where food_kind='์ผ์‹';

 
์˜ฌ๋ฐ”๋ฅธ ์ดˆ๋ฐฅ ๋ฉ”๋‰ด ๋ณด๊ธฐ

select * from find_place
	where place_name='์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ';

 

6. ์ธ๋ฑ์Šค ๋งŒ๋“ค๊ธฐ

์ธ๋ฑ์Šค๋Š” ๊ฒ€์ƒ‰์— ์ž์ฃผ ์“ฐ์ด๋Š” ์—ด์„ ์„ ํƒํ•˜๋Š” ๊ฒƒ์ด ์ข‹์œผ๋ฏ€๋กœ place_name๊ณผ food_kind๋ฅผ ๋งŒ๋“ค์—ˆ๋‹ค.

create index idx_place_place_name
	on place(place_name);
create index idx_food_food_kind
	on food(food_kind);

 

PK์™€ Uniqueํ•œ ๋ฐ์ดํ„ฐ๋Š” ์ด๋ฏธ index๊ฐ€ ๋งŒ๋“ค์–ด์ ธ ์žˆ๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค.

๊ทธ๋Ÿฐ๋ฐ ์ƒ๊ฐํ•ด๋ณด๋‹ˆ๊นŒ food_kind๋Š” ํ•œ์‹, ์ผ์‹ ๋“ฑ ์ค‘๋ณต๋„๊ฐ€ ๋†’์œผ๋ฏ€๋กœ ์ธ๋ฑ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด ๋ฌด์˜๋ฏธํ•  ๊ฒƒ ๊ฐ™์•„์„œ ์‚ญ์ œํ•˜์˜€๋‹ค.

alter table food drop index idx_food_food_kind;

 
 
์ „์ฒด์ฝ”๋“œ

drop database if exists yummy_db;
create database yummy_db;
use yummy_db;


-- place ํ…Œ์ด๋ธ”
create table place (
	num int not null primary key auto_increment,
    place_name char(20) not null unique,
    place_kind char(10) not null,
    place_howfar tinyint unsigned
);

show columns from place;

insert into place(place_name, place_kind, place_howfar) values ('์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', '์ผ์‹', 5);
insert into place(place_name, place_kind, place_howfar) values ('์ดํ˜„์šฐ์Šค์‹œ', '์ผ์‹', 6);
insert into place(place_name, place_kind, place_howfar) values ('๋ฏธ๋ถ„๋‹น', '๋ฒ ํŠธ๋‚จ์Œ์‹', 5);
insert into place(place_name, place_kind, place_howfar) values ('๋กค๋งํŒŒ์Šคํƒ€', '์–‘์‹', 4);
insert into place(place_name, place_kind, place_howfar) values ('์œก์Œˆ๋ƒ‰๋ฉด', 'ํ•œ์‹', 3);
insert into place(place_name, place_kind, place_howfar) values ('ํ™์ฝฉ๋ฐ˜์ 0410', '์ค‘์‹', 8);
insert into place(place_name, place_kind, place_howfar) values ('ํ‹ธ๋ž€', '๋ฒ ํŠธ๋‚จ์Œ์‹', 6);
insert into place(place_name, place_kind, place_howfar) values ('ํ—ฌ๋กœ๋น„์—ํŠธ', '๋ฒ ํŠธ๋‚จ์Œ์‹', 7);
insert into place(place_name, place_kind, place_howfar) values ('๊น€ํฌ๋ผ ํ•œ๊ตญ์‹์™•๋ˆ๊นŒ์Šค', 'ํ•œ์‹', 8);
insert into place(place_name, place_kind, place_howfar) values ('๊ทธ๋ž˜๋„๊ตญ์ˆ˜', 'ํ•œ์‹', 4);

select * from place;



-- food ํ…Œ์ด๋ธ”
create table food (
	num int not null primary key auto_increment,
    food_kind char(10) not null,
    food_name char(20) not null,
    place_name char(20) not null,
    food_price int not null,
    food_rating tinyint unsigned check (food_rating <=5),
    food_memo char(30),
    foreign key (place_name) references place(place_name)
);

show columns from food;

insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์˜ฌ๋ฐ”๋ฅธ์ดˆ๋ฐฅ10ps', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 14000, 5, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์ ์‹ฌํŠน์„  ์šฐ๋™์ •์‹', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 9500, 5, '๊ฐ€์„ฑ๋น„ ๊ตฟ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์ ์‹ฌํŠน์„  ๋ชจ๋ฐ€์ •์‹', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 9500, 5, '๊ฐ€์„ฑ๋น„ ๊ตฟ, ์—ฌ๋ฆ„๋ฉ”๋‰ด');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', '์•Œ๋ฐฅ', '์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ', 7000, 5, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ผ์‹', 'ํ‰์ผ ๋Ÿฐ์น˜์ดˆ๋ฐฅ', '์ดํ˜„์šฐ์Šค์‹œ', 12000, 5, '๊ธด๊ผฌ๋ฆฌ์ดˆ๋ฐฅ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', '์Šคํ…Œ์ดํฌ ํ•„๋ผํ”„', '๋กค๋งํŒŒ์Šคํƒ€', 8500, 2, '๋ง›์žˆ๋Š” ๊ณ ๊ธฐ๊ฐ€ ์•„๋‹˜..');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', 'ํ† ๋งˆํ†  ํŒŒ์Šคํƒ€', '๋กค๋งํŒŒ์Šคํƒ€', 5000, 4, '');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์–‘์‹', '๋ฐ”์งˆํŽ˜์Šคํ†  ํฌ๋ฆผ ํŒŒ์Šคํƒ€', '๋กค๋งํŒŒ์Šคํƒ€', 8500, 2, '๋ง›์—†์ง„ ์•Š์€๋ฐ ๊ตณ์ด ๋˜ ๋จน์ง„ ์•Š์„๋“ฏ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('์ค‘์‹', '์งœ์žฅ๋ฉด', 'ํ™์ฝฉ๋ฐ˜์ 0410', 6500, 3, '๊ทธ๋ƒฅ์งœ์žฅ๋ฉด');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('๋ฐฐํŠธ๋‚จ์Œ์‹', '์–‘์ง€ ์Œ€๊ตญ์ˆ˜', 'ํ‹ธ๋ž€', 9000, 5, '๊ทธ๋ฆ‡์ด ๋งค์šฐ ํผ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('ํ•œ์‹', '์™•๋ˆ๊นŒ์Šค', '๊น€ํฌ๋ผ ํ•œ๊ตญ์‹์™•๋ˆ๊นŒ์Šค', 10000, 4, '์–‘์ด ๋„ˆ๋ฌด ๋งŽ์Œ');
insert into food(food_kind, food_name, place_name, food_price, food_rating, food_memo) values
	('ํ•œ์‹', '์ž”์น˜๊ตญ์ˆ˜', '๊ทธ๋ž˜๋„๊ตญ์ˆ˜', 5000, 4, '');
    
select * from food;


-- view ๋งŒ๋“ค๊ธฐ
create view find_place
as
select place.place_name, food.food_kind, place.place_howfar, food.food_name, food.food_price, food.food_rating, food.food_memo
	from food
    join place
		on place.place_name = food.place_name
	order by food.food_rating desc;
    
    
-- ๋ฐ์ดํ„ฐ ์กฐํšŒํ•˜๊ธฐ
select * from find_place;
select * from find_place
	where food_kind='์ผ์‹';
select * from find_place
	where food_kind='ํ•œ์‹';
select * from find_place
	where place_name='์˜ฌ๋ฐ”๋ฅธ์Šค์‹œ';
728x90

"); wcs_do();