gpt4 book ai didi

java - 如何检查是否有3NF?

转载 作者:行者123 更新时间:2023-12-01 08:08:18 27 4
gpt4 key购买 nike

我创建了一个简单的CRUD应用程序数据库模式。但是,在实现之前我想检查它是否在 3NF 中:

CREATE TABLE person (
person_id int not null,
name char(30) not null,
student_no int,
staff_no int,
student_fieldOfStudy char(30),
staff_department char(30),
staff_position char(30),
faculty char(30),
PRIMARY KEY (person_id),
CONSTRAINT student_unique UNIQUE (student_no),
CONSTRAINT staff_unique UNIQUE (staff_no)
);

CREATE TABLE university (
university_id int not null,
foundationDate datetime not null,
university_name char(30) not null,
city_name char(30) not null,
country_name char(30) nut null,
PRIMARY KEY (universityID),
CONSTRAINT univ_unique UNIQUE (university_name, city_name)
);

CREATE TABLE course (
course_id int not null,
course_code char(20) not null,
lecturer_name char(30) not null,
lecture_day datetime not null,
faculty char(30) not null,
lecture_room char(30),
lecturer_id int,
student_id int,
FOREIGN KEY (student_id) REFERENCES Persons(person_id),
FOREIGN KEY (lecturer_id) REFERENCES Persons(person_id)
)

我认为它位于 3NF 中。我将不胜感激您的回复!

最佳答案

如果不知道应该执行哪些业务规则,就很难对数据库设计进行评论。您需要根据自己对业务领域的分析来确定这一点。如果没有这些信息,我们所能做的就是根据表名和列名列表做出一些假设和猜测。

人员表看起来有问题。学生和教职员工栏是否应该为 nullabale?在我看来,你在一张 table 上保留了两种不同类型的人。可能更好的是为每个人员子类型创建不同的表,并且在人员表中只具有学生和教职员工共同的属性。

3NF 的概念基于只允许值而不允许空值的关系和依赖关系。如果有空值,那么就没有满足 3NF 的关系。此外,如果 Staff_no 应该是人员属性的决定因素,那么它是一个非关键决定因素(因为它可以为空)。由于多种原因,可为空的唯一性约束不是一个好主意,您应该尽量避免它们。

关于java - 如何检查是否有3NF?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19590678/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com