📄 一句话概括
表拆好了(3NF),现在给每一列定类型:数值/字符串/日期三大家族选谁、选多大——这是把逻辑模型下楼梯到物理模型的第一步(5-9 楼层图兑现时刻)。
📝 本节和前面几节的关系
第四章 4-1~4-5 学的是「类型有哪些、脾气如何」(零件);本节是设计视角——「拆好的表怎么给列配型」(装配)。5-19 书评网站实战把每个列真正配上。
一、配型四问法(对每列连问)
| 问 | 答 | 动作 |
|---|---|---|
| 是数字吗? | 算不算钱?要不要小数? | INT/BIGINT vs DECIMAL(总,小) |
| 是文字吗? | 长度固定吗?可能多长? | CHAR(n)/VARCHAR(n)/TEXT |
| 是日期吗? | 要不要到秒? | DATE/DATETIME |
| 是真假吗? | 只有两种状态? | BOOLEAN(且要配约束锁死,4-5 的软肋) |
二、长度怎么定:留余量但不挥霍
VARCHAR(20)存姓名:中文姓名 2~4 字、少数民族姓名更长——20 字符稳DECIMAL(6,2)存单价:最大 9999.99——按业务上限留 20~50% 余量- 宁大勿溢:改长度容易(
ALTER),数据溢出截断难救
三、配型清单速查(书评网站预告)
| 列 | 类型 | 理由 |
|---|---|---|
| user_id | INT | 自增主键(4-11) |
| nickname | VARCHAR(20) | 变长短文本 |
| isbn | CHAR(13) | 定长编码(4-3 的 CHAR 用武之地) |
| score | DECIMAL(3,1) | 0~10 分一位小数 |
| created_at | DATETIME | 精确到秒的评论时间 |
四、动手 Demo:按四问法配一列
列「学生体温」:是数字 ✅;要不要小数?(要,36.8)→ 小数派;算钱吗?(不算)→ 不必 DECIMAL?——体温要精确也不能 FLOAT(0.1 陷阱无差别攻击),DECIMAL(4,1) 稳。四问法走完,类型自定。
五、30 秒实验
给「身份证号」配型:它是数字吗?(18 位含 X,是文字)→ CHAR(18) 定长——「看着像数字」的列最容易配错型,四问法先问存的是什么再问长什么样。
六、常见误区
- 「都是编码就都用 INT」:学号、ISBN、电话是文字性编号(有前导 0、有字母);INT 会把
00123变123 - 「长度取个大的保险」:
VARCHAR(255)满天飞是设计偷懒;长度文档化,后面的人才知道为什么
自测三问
1. 配型四问?(数值吗/文字吗/日期吗/真假吗) 2. ISBN 为什么用 CHAR(13)?(定长编码——CHAR 的本职) 3. 「像数字」的编号为什么常配文字型?(前导 0、字母会被 INT 吃掉)- ☐ 下一节(5-15 命名规则、同义词、同形(同音)异义词-确定表和列的名称)
相关笔记
- INT、DECIMAL、FLOAT、DOUBLE-处理数值的数据类型 —— 零件库:数值家族
- CHAR、VARCHAR、TEXT-处理字符串的数据类型 —— 零件库:字符串家族
- 概念模型、逻辑模型、物理模型-E-R图的种类 —— 本节=逻辑→物理的下楼第一步
- 🗄️ 数据库基础 · 索引 —— 全课路线图