在学习数据库设计和优化过程中,范式转换是一个重要的概念。范式转换旨在通过消除数据冗余和不一致性,提高数据库的效率和可靠性。以下是一些例题数据库,它们将帮助你更好地理解并掌握范式转换的技巧。
1. 第一范式(1NF)
例题: 假设有一个学生表,包含以下字段:学号(唯一标识每个学生)、姓名、性别、班级、年龄、联系方式。
问题: 将该表转换为1NF。
解答:
- 确保所有字段都是原子性的,即不可再分。
- 将学生表拆分为两个表:学生基本信息表(包含学号、姓名、性别、班级、年龄)和学生联系方式表(包含学号、联系方式)。
CREATE TABLE StudentInfo (
StudentID INT PRIMARY KEY,
Name VARCHAR(50),
Gender CHAR(1),
Class VARCHAR(50),
Age INT
);
CREATE TABLE ContactInfo (
StudentID INT,
Contact VARCHAR(50),
FOREIGN KEY (StudentID) REFERENCES StudentInfo(StudentID)
);
2. 第二范式(2NF)
例题: 假设有一个学生选课表,包含以下字段:学号、课程号、课程名称、教师姓名、学分。
问题: 将该表转换为2NF。
解答:
- 确保满足1NF的要求。
- 消除部分依赖,将学生选课表拆分为学生选课表和学生信息表。
CREATE TABLE StudentInfo (
StudentID INT PRIMARY KEY,
Name VARCHAR(50),
Gender CHAR(1),
Class VARCHAR(50),
Age INT
);
CREATE TABLE CourseInfo (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(50),
TeacherName VARCHAR(50),
Credits INT
);
CREATE TABLE StudentCourse (
StudentID INT,
CourseID INT,
FOREIGN KEY (StudentID) REFERENCES StudentInfo(StudentID),
FOREIGN KEY (CourseID) REFERENCES CourseInfo(CourseID)
);
3. 第三范式(3NF)
例题: 假设有一个学生成绩表,包含以下字段:学号、课程号、课程名称、教师姓名、成绩。
问题: 将该表转换为3NF。
解答:
- 确保满足2NF的要求。
- 消除传递依赖,将学生成绩表拆分为学生成绩表、课程信息和教师信息表。
CREATE TABLE StudentInfo (
StudentID INT PRIMARY KEY,
Name VARCHAR(50),
Gender CHAR(1),
Class VARCHAR(50),
Age INT
);
CREATE TABLE CourseInfo (
CourseID INT PRIMARY KEY,
CourseName VARCHAR(50),
TeacherID INT,
Credits INT
);
CREATE TABLE TeacherInfo (
TeacherID INT PRIMARY KEY,
TeacherName VARCHAR(50)
);
CREATE TABLE StudentScore (
StudentID INT,
CourseID INT,
Score INT,
FOREIGN KEY (StudentID) REFERENCES StudentInfo(StudentID),
FOREIGN KEY (CourseID) REFERENCES CourseInfo(CourseID)
);
通过以上例题,你可以更好地理解范式转换的概念和技巧。在实际应用中,合理地应用范式转换可以有效地提高数据库的质量和性能。希望这些例题数据库能帮助你轻松入门!
