數據庫入門:以商品訂單系統為例
一、前言
數據庫是現代軟件開發中不可或缺的基礎,掌握數據庫的基本概念和操作,是每個開發者的必經之路。本文將以“商品-品牌-客戶-訂單-訂單項”為例,帶你快速入門數據庫的核心知識和基本操作。
二、數據庫基礎知識回顧
1. 主鍵(Primary Key, PK)
主鍵是表中用來唯一標識一條記錄的一列或多列的組合。主鍵分為業務主鍵(如身份證號、手機號等有實際業務意義的字段)和代理主鍵(如自增ID)。
2. 外鍵(Foreign Key, FK)
外鍵用于連接兩張表,是引用另一張表的主鍵或唯一鍵,用于保證數據的完整性和關聯性。
3. 關系范式
- 1NF(第一范式):每一列的值都是不可再分的原子值。
- 2NF(第二范式):表中的每個非主屬性都完全依賴于主鍵。
- 3NF(第三范式):非主屬性之間不能有傳遞依賴。
范式的意義:消除冗余、保證數據完整性和一致性。
三、SQL 語言分類
- DDL(數據定義語言):用于定義和管理數據庫對象(如表、視圖、索引等)。
CREATE
:創建ALTER
:修改DROP
:刪除TRUNCATE
:清空GRANT
:授權
- DML(數據操作語言):用于對數據進行增刪改查(CRUD)。
INSERT
:插入SELECT
:查詢UPDATE
:更新DELETE
:刪除
- TCL(事務控制語言):用于管理事務。
四、常用數據類型
- 數值類型:
bit
、tinyint
、smallint
、int
、bigint
、decimal
、double
- 文本類型:
CHAR
、VARCHAR
、TEXT
、BLOB
、ENUM
、SET
- 日期時間類型:
DATE
、TIME
、DATETIME
、TIMESTAMP
、YEAR
- JSON類型:用于存儲結構化數據(如數組、對象)
五、實戰:商品訂單系統表設計
1. 創建數據庫
CREATE DATABASE shopdb;
USE shopdb;
2. 創建表結構
(1)品牌表
CREATE TABLE brand (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL
);
(2)商品表
CREATE TABLE product (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(64) NOT NULL,price DECIMAL(10,2) NOT NULL,brand_id INT,FOREIGN KEY (brand_id) REFERENCES brand(id)
);
(3)客戶表
CREATE TABLE customer (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(32) NOT NULL,tel CHAR(11),birthday DATE
);
(4)訂單表
CREATE TABLE orders (id INT PRIMARY KEY AUTO_INCREMENT,customer_id INT,order_date DATETIME DEFAULT CURRENT_TIMESTAMP,FOREIGN KEY (customer_id) REFERENCES customer(id)
);
(5)訂單項表
CREATE TABLE order_item (id INT PRIMARY KEY AUTO_INCREMENT,order_id INT,product_id INT,quantity INT NOT NULL,FOREIGN KEY (order_id) REFERENCES orders(id),FOREIGN KEY (product_id) REFERENCES product(id)
);
3. 插入數據示例
-- 插入品牌
INSERT INTO brand(name) VALUES ('華為'), ('蘋果');-- 插入商品
INSERT INTO product(name, price, brand_id) VALUES ('Mate60', 4999.00, 1), ('iPhone15', 6999.00, 2);-- 插入客戶
INSERT INTO customer(name, tel, birthday) VALUES ('張三', '13800000001', '1990-01-01'), ('李四', '13800000002', '1992-02-02');-- 插入訂單
INSERT INTO orders(customer_id) VALUES (1), (2);-- 插入訂單項
INSERT INTO order_item(order_id, product_id, quantity) VALUES (1, 1, 2), (1, 2, 1), (2, 2, 3);
4. 查詢數據示例
-- 查詢所有訂單及其客戶信息
SELECT o.id AS 訂單號, c.name AS 客戶名, o.order_date
FROM orders o
JOIN customer c ON o.customer_id = c.id;-- 查詢某訂單的商品明細
SELECT oi.order_id, p.name AS 商品名, oi.quantity, p.price
FROM order_item oi
JOIN product p ON oi.product_id = p.id
WHERE oi.order_id = 1;