更新時間:2023-04-26 來源:黑馬程序員 瀏覽量:
IT就到黑馬程序員.gif)
數(shù)據(jù)庫的三范式是指關(guān)系數(shù)據(jù)庫設(shè)計中的一些規(guī)則,用于減少數(shù)據(jù)冗余、提高數(shù)據(jù)一致性和避免數(shù)據(jù)插入、更新和刪除時出現(xiàn)異常情況。以下是三范式的概述:
表中的每個字段都應(yīng)該是原子性的,即不可再分解的基本數(shù)據(jù)類型,不能有多值或復(fù)雜類型的字段。例如,一個訂單表中的商品字段應(yīng)該是單個商品而不是多個商品的集合。
表中的每個非主鍵字段都應(yīng)該完全依賴于主鍵,而不是依賴于主鍵的一部分。這意味著每個表只應(yīng)該包含一組相互獨立的屬性。例如,如果一個訂單表包含商品和商品價格,則商品價格是應(yīng)該是和商品ID關(guān)聯(lián)的,而不是和訂單ID關(guān)聯(lián)的。
在2NF的基礎(chǔ)上,消除非主鍵字段之間的傳遞依賴,即不允許一個非主鍵字段依賴于另一個非主鍵字段。這可以通過將這些字段拆分到單獨的表中來實現(xiàn)。例如,一個訂單表中,如果商品價格依賴于商品的供應(yīng)商,則應(yīng)該將供應(yīng)商信息存儲在單獨的表中,并與商品關(guān)聯(lián)。
以下是一個簡單的示例代碼演示如何在 MySQL 中創(chuàng)建符合三范式的表:
-- 創(chuàng)建訂單表 CREATE TABLE orders ( order_id INT PRIMARY KEY, customer_id INT, order_date DATE ); -- 創(chuàng)建商品表 CREATE TABLE products ( product_id INT PRIMARY KEY, product_name VARCHAR(255), supplier_id INT, price DECIMAL(10,2) ); -- 創(chuàng)建供應(yīng)商表 CREATE TABLE suppliers ( supplier_id INT PRIMARY KEY, supplier_name VARCHAR(255), supplier_address VARCHAR(255), supplier_phone VARCHAR(20) ); -- 在訂單表和商品表之間建立外鍵關(guān)系 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);
在這個示例中,訂單表、商品表和供應(yīng)商表都符合三范式。訂單表包含了主鍵、顧客ID和訂單日期,商品表包含了主鍵、商品名稱、供應(yīng)商ID和價格,供應(yīng)商表包含了主鍵、供應(yīng)商名稱、地址和電話。訂單表和商品表之間通過外鍵關(guān)系建立了聯(lián)系,而不是在訂單表中添加商品價格等非主鍵信息,從而避免了數(shù)據(jù)冗余。
1024首播|39歲程序員逆襲記:不被年齡定義,AI浪潮里再迎春天
2025-10-241024程序員節(jié)丨10年同行,致敬用代碼改變世界的你
2025-10-24【AI設(shè)計】北京143期畢業(yè)僅36天,全員拿下高薪offer!黑馬AI設(shè)計連續(xù)6期100%高薪就業(yè)
2025-09-19【跨境電商運營】深圳跨境電商運營畢業(yè)22個工作日,就業(yè)率91%+,最高薪資達13500元
2025-09-19【AI運維】鄭州運維1期就業(yè)班,畢業(yè)14個工作日,班級93%同學(xué)已拿到Offer, 一線均薪資 1W+
2025-09-19【AI鴻蒙開發(fā)】上海校區(qū)AI鴻蒙開發(fā)4期5期,距離畢業(yè)21天,就業(yè)率91%,平均薪資14046元
2025-09-19