首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >增强SQL体系结构

增强SQL体系结构
EN

Stack Overflow用户
提问于 2016-04-08 10:07:52
回答 2查看 62关注 0票数 1

我需要设计一个没有重复组的表,我认为我已经这样做了,但是这个表看起来与它们的链接方式是正确的吗?或者有什么我可以改进的?我运行了所有的查询,我有几个重复的小组球员和经理,因为我把他们都放在一个班组,所以我把他们分成team_player和team_manager,这样一个或多个经理也可以管理一个团队,反之亦然,体育场等。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
drop table film_director;
drop table film_actor;
drop table film;
drop table studio;
drop table actor;
drop table director;

CREATE TABLE studio(
  studio_ID NUMBER NOT NULL,
  studio_Name VARCHAR2(30),
  PRIMARY KEY(studio_ID));

CREATE TABLE film(
  film_ID NUMBER NOT NULL,
  studio_ID NUMBER NOT NULL,
  genre VARCHAR2(30),
  genre_ID NUMBER(1),
  film_Len NUMBER(3),
  film_Title VARCHAR2(30) NOT NULL,
  year_Released NUMBER NOT NULL,
  PRIMARY KEY(film_ID),
  FOREIGN KEY (studio_ID) REFERENCES studio);

CREATE TABLE director(
  director_ID NUMBER NOT NULL,
  director_fname VARCHAR2(30),
  director_lname VARCHAR2(30),
  PRIMARY KEY(director_ID));

CREATE TABLE actor(
  actor_ID NUMBER NOT NULL,
  actor_fname VARCHAR2(15),
  actor_lname VARCHAR2(15),
  PRIMARY KEY(actor_ID));

CREATE TABLE film_actor(
  film_ID NUMBER NOT NULL,
  actor_ID NUMBER NOT NULL,
  PRIMARY KEY(film_ID, actor_ID),
  FOREIGN KEY(film_ID) REFERENCES film(film_ID),
  FOREIGN KEY(actor_ID) REFERENCES actor(actor_ID));

CREATE TABLE film_director(
  film_ID NUMBER NOT NULL,
  director_ID NUMBER NOT NULL,
  PRIMARY KEY(film_ID, director_ID),
  FOREIGN KEY(film_ID) REFERENCES film(film_ID),
  FOREIGN KEY(director_ID) REFERENCES director(director_ID));

INSERT INTO studio (studio_ID, studio_Name) VALUES (1, 'Paramount');
INSERT INTO studio (studio_ID, studio_Name) VALUES (2, 'Warner Bros');
INSERT INTO studio (studio_ID, studio_Name) VALUES (3, 'Film4');
INSERT INTO studio (studio_ID, studio_Name) VALUES (4, 'Working Title Films');

INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (1, 1, 'Comedy', 1, 180, 'The Wolf Of Wall Street', 2013);
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (2, 2, 'Romance', 2, 143, 'The Great Gatsby', 2013);
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (3, 3, 'Science Fiction', 3, 103, 'Never Let Me Go', 2008);
INSERT INTO film (film_ID, studio_ID, genre, genre_ID, film_Len, film_Title, year_Released) VALUES (4, 4, 'Romance', 4, 127, 'Pride and Prejudice', 2005);

INSERT INTO director (director_ID, director_fname, director_lname) VALUES (1, 'Martin', 'Scorcese');
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (2, 'Baz', 'Luhrmann');
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (3, 'Mark', 'Romanek');
INSERT INTO director (director_ID, director_fname, director_lname) VALUES (4, 'Joe', 'Wright');

INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (1, 'Matthew', 'McConnaughy');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (2, 'Leonardo', 'DiCaprio');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (3, 'Margot', 'Robbie');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (4, 'Joanna', 'Lumley');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (5, 'Carey', 'Mulligan');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (6, 'Tobey', 'Maguire');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (7, 'Joel', 'Edgerton');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (8, 'Keira', 'Knightly');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (9, 'Andrew', 'Garfield');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (10, 'Sally', 'Hawkins');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (11, 'Judi', 'Dench');
INSERT INTO actor (actor_ID, actor_fname, actor_lname) VALUES (12, 'Matthew', 'Macfadyen');

INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 1);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 2);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 3);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (1, 4);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 2);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 5);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 6);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (2, 7);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 5);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 8);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 9);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (3, 10);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 5);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 8);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 11);
INSERT INTO film_actor (film_ID, actor_ID) VALUES (4, 12);

INSERT INTO film_director (film_ID, director_ID) VALUES (1,1);
INSERT INTO film_director (film_ID, director_ID) VALUES (2,2);
INSERT INTO film_director (film_ID, director_ID) VALUES (3,3);
INSERT INTO film_director (film_ID, director_ID) VALUES (4,4);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-08 11:25:47

我同意sdmon --因为导演和演员都有相同的属性,所以把它们都放在一个表中,并在“事实”表中指定他们的角色是有意义的。

一部电影能有一个以上的导演吗?如果不需要,则不需要film_director表,只需在电影表中为“导演”提供一列。否则,您确实需要film_director表。

一部电影能被绑在一个以上的制片厂吗?在您的模型中,您的胶片表中有一个用于studio_id的列,但也有一个film_studio表。你不需要两者兼得。如果电影总是由单个工作室制作,则需要列(而不是表)。如果您需要为一部电影放映多个工作室,那么您需要额外的表,而不是列。

其他一切看起来都很好。祝好运!

票数 1
EN

Stack Overflow用户

发布于 2016-04-08 10:18:00

我只有一张供用户使用的桌子(导演/演员),因为如果导演也是昆汀·塔伦蒂诺()这样的演员,他的大部分电影都会出现。你必须重复数据。

normalization

试着把你的模型提高到BCNF或4NF,你就会没事的

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36506433

复制
相关文章

相似问题

添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文