-
简短的查询优于较长的查询
-
__原子性__数据:
(1) 定义:它已经被分割至最小块,__不能或不应该__再被分割
对于同样的信息,不同的表对于原子性数据的需求不同
示例
地址包括街道 + 门牌号,对于外卖来说,它们应该合在一列存储;对于房地产中介来说,应该分成两列存储
(2) 规则一
具有原子性数据的列不会有多个类型相同的值
示例
food_name | ingredient ------------------------------ bread | flour, milk, egg ------------------------------ salad | lettuce, tomato ------------------------------ 在这张表中,flour,milk,egg等都是类型相同的值,它们放在同一列存储,意味着想在bread中找到某个具体的成分很困难
改成下面这样也不对,因为它破坏了规则二
food_name | ingredient1 | ingredient2 | ingredient3 ---------------------------------------------------- bread | flour | milk | egg ---------------------------------------------------- salad | lettuce | tomato | null ----------------------------------------------------
(3) 规则二
具有原子性数据的表中不会有多个存储同类数据的列
示例
teacher_name | student1 | student2 | student3 | ----------------------------------------------- Martini | Joe | Ron | Kelly | ----------------------------------------------- Howard | Sanjaya | Tim | Julie | ----------------------------------------------- student1,student2,student3都是存储同类数据的列
应该变成
table1 teacher_id | teacher_name 1 | Martini 2 | Howard table2 id | teacher_id | student_name 1 | 1 | Joe 2 | 1 | Ron 3 | 1 | Kelly 4 | 2 | Sanjaya 5 | 2 | Tim 6 | 2 | Julie
-
第一范式 1NF
(1) 每个数据行必须包含具有原子性的值
(2) 每个数据行都要有__主键__
-
主键
(1) 表中某一列,可以保证记录的唯一性
(2) 主键不可以为NULL
(3) 最佳主键是新的主键–id列
-
AUTO_INCREMENT设置的自增从__1__开始(和SQL的习惯一样)
示例
CREATE TABLE my_contacts ( id INT(4) NOT NULL AUTO_INCREMENT, name VARCHAR(10) NOT NULL, PRIMARY KEY (id) );
AUTO INCREMENT每个表只能有一列可以使用