在關係數據庫設計中,常常會涉及到範式(normal form)。範式的主要目的是提高數據的一致性和可靠性。而在範式中,最常見的就是1nf、2nf、3nf、bcnf。
一、1nf
1nf,即第一範式,是關係數據庫設計中最基本的規範。它要求關係中的每個屬性都是原子的,不可再分解的。舉例來說,如果一個商品記錄中的「顏色」屬性是由「紅、黃、綠」三個值組成的字符串,就不符合1nf。
以下是一個符合1nf的例子:
CREATE TABLE products ( id INT PRIMARY KEY, name VARCHAR(50), price DECIMAL(10,2), description TEXT )
二、2nf
2nf,即第二範式,是在1nf的基礎上進一步規範的。它要求關係中的每個非主鍵屬性都完全依賴於主鍵。
舉例來說,如果有一張訂單詳情表,其中包含訂單項名稱、訂單項價格、訂單id和客戶id四個屬性,其中訂單項名稱和訂單項價格都只與訂單id有關係,而與客戶id無關,那麼就不符合2nf,因為它違反了「完全依賴主鍵」的原則。
以下是一個符合2nf的例子:
CREATE TABLE order_items ( id INT PRIMARY KEY, order_id INT NOT NULL, product_id INT NOT NULL, quantity INT, price DECIMAL(10,2), FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (product_id) REFERENCES products(id) );
三、3nf
3nf,即第三範式,是在2nf的基礎上進一步規範的。它要求關係中的每個非主鍵屬性都不依賴於其它非主鍵屬性。
一個符合3nf的例子:
CREATE TABLE users ( id INT PRIMARY KEY, username VARCHAR(50), email VARCHAR(50), password_hash CHAR(64), birthdate DATE, address VARCHAR(50) );
在上面的例子中,username、email、password_hash、birthdate和address都是完全獨立的屬性,它們互不依賴。
四、BCNF
BCNF,即巴斯-科德範式,是在3nf的基礎上進一步規範的。它要求關係中的每個依賴都必須是一個超鍵。
一個符合BCNF的例子:
CREATE TABLE customers ( id INT PRIMARY KEY, name VARCHAR(50), email VARCHAR(50), phone VARCHAR(20), UNIQUE (email, phone) ); CREATE TABLE orders ( id INT PRIMARY KEY, customer_id INT NOT NULL, total DECIMAL(10,2) NOT NULL, FOREIGN KEY (customer_id) REFERENCES customers(id) ); CREATE TABLE order_items ( id INT PRIMARY KEY, order_id INT NOT NULL, product_id INT NOT NULL, quantity INT, price DECIMAL(10,2), FOREIGN KEY (order_id) REFERENCES orders(id), FOREIGN KEY (product_id) REFERENCES products(id) );
在上面的例子中,customers表中的email和phone字段組成了一個唯一鍵,因為一個客戶的email和phone是唯一的。而orders表中的customer_id字段是customers表的主鍵,而order_items表中的order_id和product_id字段組成了orders表的主鍵。因此,上面的表結構符合BCNF。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/295544.html