通过识别功能依赖项来证明 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 keyuniqueunique index等(。唯一约束为您提供了功能依赖项的左侧。例如,在

CREATE TABLE venues(
id serial PRIMARY KEY,
NAME TEXT,
address TEXT
);

FD ID->名称,地址成立。名称->地址和地址->名称不成立。该表允许此类数据。 应该吗?

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

某些表没有唯一的约束。这对你来说是一个问题。

某些表应具有多个唯一约束。在上表中,您可能需要对名称、地址或对的唯一约束。

最新更新