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/zh-hk/n/277865.html