通过确定功能依赖性来证明SQL数据库在3NF中

时间:2018-06-29 11:25:23

标签: sql database functional-programming dependencies 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,但是我不确定这些功能依赖关系在表中的样子。

谢谢

1 个答案:

答案 0 :(得分:1)

您的问题似乎可以归结为:如何从SQL数据库(或SQL模式或SQL表)获得功能依赖性?

首先,查看唯一性约束(primary keyuniqueunique index等。唯一性约束为您提供功能依赖项的左侧。例如,在

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

FD ID-> NAME,地址保留。 NAME->地址和地址-> 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

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

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