Cra*_*rse 1 database-design normalization
我正在尝试规范化这种关系:
film_year film_name critic_id critic_name cinemas_debut score
2004 I robot 111 John NY_cinema, LA_cinema 4
2004 I robot 222 Mathiew NY_cinema, LA_cinema 5
Run Code Online (Sandbox Code Playgroud)
哪里......
我无法将关系转换为3FN.这是我试过的:
到1NF:
film_year film_name critic_id critic_name cinemas_debut score
2004 I robot 111 John NY_cinema 4
2004 I robot 222 Mathiew LA_cinema 5
2004 I robot 111 John NY_cinema 4
2004 I robot 222 Mathiew LA_cinema 5
Run Code Online (Sandbox Code Playgroud)
至2NF:
我认为critics关系 critics ( critic_id (pk), critic_name )
也是reviews关系,reviews(film_year (pk), film_name (pk), critic_id (pk), score)
但我不知道如何处理结果关系:
film_year film_name critic_id cinemas_debut
2004 I robot 111 NY_cinema
2004 I robot 222 LA_cinema
2004 I robot 111 NY_cinema
2004 I robot 222 LA_cinema
Run Code Online (Sandbox Code Playgroud)
我的做法有什么问题?有人可以将此关系翻译为3FN吗?谢谢.
我的建议是使用以下内容:
create table films
(
film_id int,
film_year int,
film_name varchar(50)
);
create table critics
(
critic_id int,
critic_name varchar(50)
);
Run Code Online (Sandbox Code Playgroud)
在创建表后的films和critics创造两者之间的连接表
create table film_critic
(
film_id int,
critic_id int,
score int
);
Run Code Online (Sandbox Code Playgroud)
然后获取位置,为主要城市/地点创建一个表格
create table premiere_locations
(
location_id int,
location_name varchar(50)
);
Run Code Online (Sandbox Code Playgroud)
最后在电影和城市之间创建一个连接表
create table film_location
(
film_id int,
location_id int
);
Run Code Online (Sandbox Code Playgroud)
然后查询您将使用的数据:
select f.film_year,
f.film_name,
c.critic_id,
c.critic_name,
fc.score,
l.location_name
from films f
left join film_critic fc
on f.film_id = fc.film_id
left join critics c
on fc.critic_id = c.critic_id
left join film_location fl
on f.film_id = fl.film_id
left join premiere_locations l
on fl.location_id = l.location_id
Run Code Online (Sandbox Code Playgroud)