1nf
資料表中的所有欄位都是不可分割的原子值
字段值還可以繼續拆分的就不滿足第一正規化,字段不可拆分滿足第一正規化mysql> create table student2
( id int primary key, name varchar(20
), address varchar(30
));mysql> insert into student2 values(1
,'張三'
,'中國江蘇省無錫市');
mysql> insert into student2 values(2
,'李四'
,'中國江蘇省南京市');
mysql> insert into student2 values(3
,'王五'
,'中國上海上海市');
mysql> select * from student2;+--
--+----
----+--
----
----
----
----
----
----
+| id | name | address |+--
--+----
----+--
----
----
----
----
----
----+|
1| 張三 | 中國江蘇省無錫市 ||2
| 李四 | 中國江蘇省南京市 ||3
| 王五 | 中國上海上海市 |+--
--+----
----+--
----
----
----
----
----
----
+3 rows in set (
0.00 sec)
正規化設計的越詳細對於某些實際操作可能更好,但不一定都是好處,以實際需求決定。mysql> create table student3
( id int primary key, name varchar(20
),country varchar(30
),provence varchar(30
),city varchar(30
));mysql> insert into student3 values(1
,'張三'
,'中國'
,'江蘇省'
,'無錫市');
mysql> insert into student3 values(2
,'李四'
,'中國'
,'江蘇省'
,'南京市'
);
mysql> insert into student3 values(3
,'王五'
,'中國'
,'上海'
,'上海市'
);
mysql> select * from student3;+--
--+----
----+--
-------
+------
-----+
----
-------
+| id | name | country | provence | city |+--
--+----
----+--
-------
+------
-----+
----
-------
+|1| 張三 | 中國 | 江蘇省 | 無錫市 ||2
| 李四 | 中國 | 江蘇省 | 南京市 ||3
| 王五 | 中國 | 上海 | 上海市 |+--
--+----
----+--
-------
+------
-----+
----
-------
+3 rows in set (
0.00 sec)
2nf必須滿足第一正規化的前提下,第二正規化要求除主鍵外的每一列都必須完全依賴於主鍵。
如果要出現不完全依賴,只可能發生在聯合主鍵的情況下。
拆表create table myorder
( product_id int
, consumer_id int
, product_name varchar(20
), consumer_name varchar(20
),primary key
(product_id,consumer_id));
除主鍵以外的列只依賴於主鍵的部分字段。
3nfcreate table myorder
( order_id int primary key,
product_id int
, consumer_id int);
create table product
( id int primary key,
name varchar (20)
);create table consumer
( id int primary key,
name varchar (20)
);滿足第二正規化
必須先滿足第二正規化,除主鍵列的其他列之間不能有傳遞依賴的關係。
consumer_phone varchar(15)與consumer_id int有關依賴關係。create table myorder
( order_id int primary key,
product_id int
, consumer_id int
, consumer_phone varchar(15
)//此處刪掉
);
所以應該
附加:一處錯誤create table consumer
( id int primary key,
name varchar (20)
, consumer_phone varchar(15
)//放在這裡
);
報錯不能用中文mysql> insert into student2 values(1
,'zs'
,'地球');
error 1366
(hy000)
: incorrect string value:
'\xe5\x9c\xb0\xe7\x90\x83'
for column 'address' at row 1
解決:整個修改:
(此處修改了兩個字段可以使用中文name和address)mysql> set names utf8;
query ok,
0 rows affected (
0.00 sec)
乙個字段乙個欄位改
mysql> alter table student2 change address address varchar(30
) character set utf8;
query ok,
1 row affected (
0.03 sec)
mysql> alter table student2 change name name varchar(20
) character set utf8;
MySQL資料表設計,三大正規化
個人筆記,僅供參考 三大正規化即三個建立資料表的準則,根據自己的實際需求決定是否遵守即可 資料表中的所有欄位都是不可分割的原子值 例如乙個位址資訊,如果全部存在乙個欄位中就不符合第一正規化,需要把國家,省份這些資訊盡可能拆分到不同欄位才滿足。這樣可以方便以後檢索。舉例 create table st...
資料表三大設計正規化
第一正規化 inf資料表中所有欄位都是不可分割的原子值 create table student2 id int primary key,name varchar 20 address varchar 30 insert into student2 values 1,li 四川省成都市武侯大道100...
(Mysql 八)資料表設計的三大正規化
目錄 基礎知識 一 第一正規化 每一列都是不可分割的原子資料項 存在問題 二 第二正規化 在第一正規化的基礎上,非碼屬性必須完全依賴於碼 三 第三正規化 在第二正規化的基礎上,消除傳遞依賴 四 表與表之間的對應關係 1.多對一 2.多對多 設計資料庫時,遵從不同的規範要求,設計出合理的關係型資料庫,...