MySQL三范式指的是关系型数据库设计的三个标准化范式。它们分别是第一范式(1NF)、第二范式(2NF)和第三范式(3NF)。
一、第一范式(1NF)
第一范式要求关系模式中的每个属性都是原子性的,即要求属性值不可再分解。比如,一个学生的学号和姓名是不能再分解的,但是一个学生的地址是可以分解成省、市、区三个属性。因此,应该将地址拆分成三个独立的属性,这样才能满足第一范式的要求。
示例代码:
CREATE TABLE student ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, sex CHAR(1) NOT NULL, birthday DATE, address VARCHAR(100), PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
二、第二范式(2NF)
第二范式要求关系模式必须满足第一范式,同时每个非主属性都必须完全依赖于主键,而不能只依赖于主键的部分属性。例如,如果学生表中有一个课程名字的字段,那么这个字段应该与学生的id关联,而不是与学生的姓名关联,因为学生的姓名可能会发生变化。
示例代码:
CREATE TABLE student ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, sex CHAR(1) NOT NULL, birthday DATE, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE course ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, teacher VARCHAR(50) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE student_course ( id INT(11) NOT NULL AUTO_INCREMENT, student_id INT(11) NOT NULL, course_id INT(11) NOT NULL, score INT(11), PRIMARY KEY (id), FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
三、第三范式(3NF)
第三范式要求关系模式必须满足第二范式,并且不存在非主属性对主键的传递依赖。传递依赖指的是存在A->B->C这样的依赖关系,即C依赖于B,B又依赖于A,而A是主键。这种情况下,应该将B拆分出来,使得C直接依赖于A。
示例代码:
CREATE TABLE student ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, sex CHAR(1) NOT NULL, birthday DATE, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE course ( id INT(11) NOT NULL AUTO_INCREMENT, name VARCHAR(50) NOT NULL, teacher VARCHAR(50) NOT NULL, PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE student_course ( id INT(11) NOT NULL AUTO_INCREMENT, student_id INT(11) NOT NULL, course_id INT(11) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; CREATE TABLE score ( id INT(11) NOT NULL AUTO_INCREMENT, student_id INT(11) NOT NULL, course_id INT(11) NOT NULL, score INT(11) NOT NULL, PRIMARY KEY (id), FOREIGN KEY (student_id) REFERENCES student(id), FOREIGN KEY (course_id) REFERENCES course(id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
四、总结
通过对MySQL三范式的阐述,我们可以了解到关系型数据库设计中的一些常用规范。在实际应用中,不仅需要满足范式的要求,还需要考虑实际业务需求,做出更加合适的设计。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/277865.html