sql - 通过识别功能依赖关系证明 SQL 数据库在 3NF 中
问题描述
有以下表格
CREATE TABLE venues(
id serial PRIMARY KEY,
NAME TEXT,
address TEXT
);
CREATE TABLE movies(
id serial PRIMARY KEY,
title TEXT,
YEAR INT);
CREATE TABLE genres(
id serial PRIMARY KEY,
NAME TEXT,
description TEXT
);
CREATE TABLE movies_genres(
movie_id INT REFERENCES movies(id),
genre_id INT REFERENCES genres(id)
);
CREATE TABLE actors(
id serial PRIMARY KEY,
NAME TEXT
);
CREATE TABLE movies_actors(
movie_id INT REFERENCES movies(id),
actor_id INT REFERENCES actors(id)
);
CREATE TABLE screenings(
id serial PRIMARY KEY,
venue_id INT REFERENCES venues(id),
movie_id INT REFERENCES movies(id),
DATE TEXT,
TIME TEXT
);
CREATE TABLE sold_tickets(
screening_id INT REFERENCES screenings(id),
ROW INT NOT NULL,
seat INT NOT NULL,
unique(screening_id, ROW, seat)
);
- 用 PostgreSQL 的语法编写,如何通过识别功能依赖关系来证明这个数据库是第三范式(3NF)?X -> Y
我在想也许一种顺序证明数据库在 1NF,然后是 2NF,然后是 3NF 的方法会很好,但是我不确定这些功能依赖关系在这个表上会是什么样子。
谢谢
解决方案
看起来您的问题归结为:您如何从 SQL 数据库(或 SQL 模式或 SQL 表)派生功能依赖关系?
首先,查看唯一约束(primary key
、unique
、unique index
等。唯一约束为您提供函数依赖的左侧。例如,在
CREATE TABLE venues(
id serial PRIMARY KEY,
NAME TEXT,
address TEXT
);
FD id->NAME,地址保存。NAME->address 和 address->NAME 不成立。该表允许此类数据。应该是?
id NAME address
--
1 Wilton Stage 123 Main St
2 Wilton Jazz 321 Main St
3 Wilton Stage 123 Main St
4 Wilton Patio 123 Main St
5 Hayes Lounge 123 Main St
6 Wilton Stage 124 Main St
您的某些表没有唯一约束。这对你来说是个问题。
一些表应该有多个唯一约束。在上表中,您可能需要对名称、地址或对进行唯一约束。
推荐阅读
- tensorflow - 基于状态为图像的 keras 的 Actor Critic
- reactjs - 如何从阻止页面渲染中删除更漂亮的错误
- reactjs - 错误:使用 yt-search 和 create-react-app 找不到模块“cheerio”
- python - Python检查列表中已存在元素
- react-native - GoogleSignIn.null:在 Android 上使用 Google 登录时出现 DEVELOPER_ERROR
- git - 致命:'origin' 似乎不是 git 存储库 请确保您具有正确的访问权限并且存储库存在
- javascript - 在 Google App Script 中获取带前缀的 XML 元素
- javascript - 快照侦听器中未捕获的错误:FirebaseError:缺少权限或权限不足
- python - 减少文本文件列表中的数量
- ruby - 无法在 MacOS 11.0 中使用“pod install”