自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

你的數(shù)據(jù)庫(kù)在裸奔嗎?MySQL范式設(shè)計(jì)防脫發(fā)指南

數(shù)據(jù)庫(kù) MySQL
當(dāng)你的數(shù)據(jù)庫(kù)出現(xiàn)這些癥狀:查詢像老太太爬樓梯、重復(fù)數(shù)據(jù)能玩連連看、改個(gè)字段要?jiǎng)游鍙埍怼獎(jiǎng)e急著植發(fā)!這篇用奶茶店經(jīng)營(yíng)黑話解讀的范式設(shè)計(jì)手冊(cè),保你3分鐘抓住設(shè)計(jì)精髓!

當(dāng)你的數(shù)據(jù)庫(kù)出現(xiàn)這些癥狀:查詢像老太太爬樓梯、重復(fù)數(shù)據(jù)能玩連連看、改個(gè)字段要?jiǎng)游鍙埍怼獎(jiǎng)e急著植發(fā)!這篇用奶茶店經(jīng)營(yíng)黑話解讀的范式設(shè)計(jì)手冊(cè),保你3分鐘抓住設(shè)計(jì)精髓!

1.范式設(shè)計(jì)就像開奶茶店(真實(shí)場(chǎng)景暴擊)

錯(cuò)誤示范:把所有東西堆在收銀臺(tái)

CREATE TABLE chaos_orders (
    order_id INT,
    customer_name VARCHAR(20),  -- 顧客每次來(lái)都要重新登記
    milk_tea_A INT,  -- 賣到第20款奶茶怎么辦?
    price_A DECIMAL,
    milk_tea_B INT,
    price_B DECIMAL
);

每日崩潰現(xiàn)場(chǎng)

  • 王同學(xué)每次下單都要重填手機(jī)號(hào)(數(shù)據(jù)冗余)
  • 新品上架要改表結(jié)構(gòu)(字段爆炸)
  • 發(fā)現(xiàn)手機(jī)號(hào)填錯(cuò)要改100條記錄(修改噩夢(mèng))

2.三大范式:開連鎖店的秘密武器

第一范式(1NF):吧臺(tái)操作標(biāo)準(zhǔn)化

痛點(diǎn):原料亂堆(數(shù)據(jù)非原子)

-- 錯(cuò)誤姿勢(shì):把訂單和奶茶混在一起
CREATE TABLE bad_orders (
    order_id INT,
    items VARCHAR(200)  -- "茉莉奶綠*1,芝士葡萄*2"
);
-- 正確姿勢(shì):拆解操作臺(tái)
CREATE TABLE orders (
    order_id INT PRIMARY KEY,
    customer_id INT,
    order_time DATETIME
);
CREATE TABLE order_items (  -- 專門做奶茶的區(qū)域
    item_id INT AUTO_INCREMENT,
    order_id INT,
    milk_tea_name VARCHAR(20),
    quantity INT,
    PRIMARY KEY(item_id)
);

避坑指南

  • 用流水線代替大雜燴(分離訂單主體和明細(xì))
  • 自增ID解放生產(chǎn)力(不用手動(dòng)維護(hù)關(guān)聯(lián)關(guān)系)

第二范式(2NF):后廚分區(qū)管理

經(jīng)典翻車:把會(huì)員優(yōu)惠和奶茶綁定

CREATE TABLE problem_orders (
    order_id INT,
    milk_tea_id INT,
    discount_id INT,  -- 這個(gè)優(yōu)惠屬于訂單,不是某杯奶茶!
    PRIMARY KEY(order_id, milk_tea_id)
);

升級(jí)方案:

-- 把會(huì)員卡專區(qū)獨(dú)立出來(lái)
ALTER TABLE orders ADD discount_id INT;  -- 優(yōu)惠屬于整個(gè)訂單
-- 保留純凈的奶茶制作區(qū)
CREATE TABLE order_items (
    item_id INT AUTO_INCREMENT,
    order_id INT,
    milk_tea_id INT,
    quantity INT,
    PRIMARY KEY(item_id)
);

關(guān)鍵認(rèn)知:消除"部分依賴"就像區(qū)分收銀區(qū)和制作區(qū)

第三范式(3NF):中央倉(cāng)庫(kù)體系

常見錯(cuò)誤:在分店存面粉(冗余地址)

CREATE TABLE customers (
    customer_id INT,
    address VARCHAR(100),  -- "北京市海淀區(qū)xx路"
    district VARCHAR(20)  -- 這個(gè)其實(shí)可以從地址提取
);

優(yōu)化方案:

-- 建立區(qū)域中心倉(cāng)
CREATE TABLE addresses (
    address_id INT PRIMARY KEY,
    full_address VARCHAR(100),
    district VARCHAR(20),
    city VARCHAR(20)
);
-- 分店只存提貨單號(hào)
CREATE TABLE customers (
    customer_id INT PRIMARY KEY,
    address_id INT
);

設(shè)計(jì)哲學(xué):不要重復(fù)造輪子(數(shù)據(jù)無(wú)冗余)

3.打破范式的藝術(shù)時(shí)刻(反范式設(shè)計(jì)寶典)

當(dāng)查詢要跨10張表時(shí),是時(shí)候祭出這張對(duì)照表

場(chǎng)景

范式方案

反范式妙招

效果對(duì)比

每日銷售報(bào)表

關(guān)聯(lián)5張表計(jì)算

預(yù)聚合每日統(tǒng)計(jì)表

查詢速度↑500%

熱門奶茶排行榜

實(shí)時(shí)COUNT所有訂單

增加counter字段

并發(fā)能力↑300%

用戶最近訂單顯示

關(guān)聯(lián)用戶表+地址表+訂單表

訂單表冗余用戶名和地址

代碼量減少70%

黃金法則

  • 讀多寫少:大膽冗余(如統(tǒng)計(jì)字段)
  • 高頻訪問(wèn):適當(dāng)緩存(如熱門商品)
  • 歷史數(shù)據(jù):定期歸檔(如3年前訂單)

4.新手上路自查清單

給你的數(shù)據(jù)庫(kù)做個(gè)快速體檢

  • 同一字段在多處重復(fù)出現(xiàn)(如用戶手機(jī)號(hào))
  • 需要修改多個(gè)地方才能更新一條信息
  • 經(jīng)常需要修改表結(jié)構(gòu)新增字段
  • 統(tǒng)計(jì)查詢要關(guān)聯(lián)超過(guò)3張表
  • 存在可以推導(dǎo)出的冗余字段(如年齡和生日)

中2條以上:你的數(shù)據(jù)庫(kù)需要范式干預(yù)!全中:兄弟,你的庫(kù)在裸奔啊!

5.小結(jié)

范式設(shè)計(jì)不是緊箍咒,而是數(shù)據(jù)庫(kù)的健身教練。好的設(shè)計(jì)應(yīng)該像奶茶配方:層次分明又能靈活調(diào)整。記?。簺]有最好的設(shè)計(jì),只有最適合業(yè)務(wù)的設(shè)計(jì)!你的數(shù)據(jù)庫(kù)體檢結(jié)果如何?


責(zé)任編輯:武曉燕 來(lái)源: JAVA充電
相關(guān)推薦

2011-04-21 13:53:52

2017-03-03 15:23:46

數(shù)據(jù)庫(kù)設(shè)計(jì)范式

2011-04-15 11:29:31

數(shù)據(jù)庫(kù)設(shè)計(jì)

2010-04-14 13:25:15

Oracle數(shù)據(jù)

2022-12-27 08:38:45

關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)

2011-03-22 14:20:23

數(shù)據(jù)庫(kù)設(shè)計(jì)規(guī)范

2025-01-03 08:42:59

數(shù)據(jù)庫(kù)三范式架構(gòu)

2023-09-13 10:48:40

2021-12-10 07:47:31

MySQL設(shè)置數(shù)據(jù)庫(kù)

2017-09-26 13:35:40

Mysql數(shù)據(jù)庫(kù)設(shè)計(jì)樹狀數(shù)據(jù)

2019-01-02 11:10:40

MySQL數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)設(shè)計(jì)

2024-03-13 10:40:00

性能探測(cè)工具SQL語(yǔ)句數(shù)據(jù)庫(kù)

2019-04-08 14:58:36

數(shù)據(jù)庫(kù)SQL數(shù)據(jù)類型

2020-11-20 14:49:56

數(shù)據(jù)庫(kù)

2021-01-06 10:52:02

MySQL數(shù)據(jù)庫(kù)安全

2011-03-28 13:47:12

數(shù)據(jù)庫(kù)設(shè)計(jì)

2017-01-18 18:28:54

大數(shù)據(jù)數(shù)據(jù)庫(kù)技術(shù)

2020-07-31 08:07:54

Python開發(fā)數(shù)據(jù)庫(kù)

2021-09-15 09:51:36

數(shù)據(jù)庫(kù)架構(gòu)技術(shù)

2021-10-12 15:58:53

手機(jī)數(shù)據(jù)隱私
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)