更新時間:2023-04-26 來源:黑馬程序員 瀏覽量:
數據庫的三范式是指關系數據庫設計中的一些規則,用于減少數據冗余、提高數據一致性和避免數據插入、更新和刪除時出現異常情況。以下是三范式的概述:
表中的每個字段都應該是原子性的,即不可再分解的基本數據類型,不能有多值或復雜類型的字段。例如,一個訂單表中的商品字段應該是單個商品而不是多個商品的集合。
表中的每個非主鍵字段都應該完全依賴于主鍵,而不是依賴于主鍵的一部分。這意味著每個表只應該包含一組相互獨立的屬性。例如,如果一個訂單表包含商品和商品價格,則商品價格是應該是和商品ID關聯的,而不是和訂單ID關聯的。
在2NF的基礎上,消除非主鍵字段之間的傳遞依賴,即不允許一個非主鍵字段依賴于另一個非主鍵字段。這可以通過將這些字段拆分到單獨的表中來實現。例如,一個訂單表中,如果商品價格依賴于商品的供應商,則應該將供應商信息存儲在單獨的表中,并與商品關聯。
以下是一個簡單的示例代碼演示如何在 MySQL 中創建符合三范式的表:
-- 創建訂單表 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE ); -- 創建商品表 CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(255), supplier_id INT, price DECIMAL(10,2) ); -- 創建供應商表 CREATE TABLE suppliers ( supplier_id INT PRIMARY KEY, supplier_name VARCHAR(255), supplier_address VARCHAR(255), supplier_phone VARCHAR(20) ); -- 在訂單表和商品表之間建立外鍵關系 ALTER TABLE orders ADD CONSTRAINT fk_customer FOREIGN KEY (customer_id) REFERENCES customers(customer_id); ALTER TABLE products ADD CONSTRAINT fk_supplier FOREIGN KEY (supplier_id) REFERENCES suppliers(supplier_id);
在這個示例中,訂單表、商品表和供應商表都符合三范式。訂單表包含了主鍵、顧客ID和訂單日期,商品表包含了主鍵、商品名稱、供應商ID和價格,供應商表包含了主鍵、供應商名稱、地址和電話。訂單表和商品表之間通過外鍵關系建立了聯系,而不是在訂單表中添加商品價格等非主鍵信息,從而避免了數據冗余。