資料庫基礎系列 正規化 MySQL資料格式

2021-09-26 13:58:30 字數 3166 閱讀 1218

正規化(normal form, nf)是關聯式資料庫理論的基礎,設計資料庫結構過程中遵循的規則和指導方法.常用正規化有三種,即1nf,2nf和3nf。

序號正規化描述1

第一正規化

列的原子性,即列為原子性、不可再拆分的基本資料格式,如整型、浮點型、字串、布林型,不是這些資料型別組合形式,如陣列、集合等可拆分的資料形式。

2第二正規化

滿足第一正規化,包含主鍵,非主鍵列完全依賴主鍵,第二正規化中的非主鍵資料都有唯一的主鍵標識,因此要求主鍵是不可重複的。

3第三正規化

第二正規化的子集,第三正規化避免冗餘資料,即共用的非主鍵資料,為單獨的表,不在其他表中重複出現。

以mysql關係型資料庫為例,介紹三種正規化。

序號資料型別

字元數描述

1char(size)

2^8-1

儲存固定長度的字串(字母、數字及特殊字元),size為指定的長度,最多儲存255個字元

2varchar(size)

2^8-1

儲存可變長度的字串(字母、數字及特殊字元),size為指定的長度,最多儲存255個字元,若長度大於255則轉換為text型別

3tinytext

2^8-1

最多儲存255個字元

4text

2^16-1

儲存大型字串,最多儲存65535個字元

5mediumtext

2^24-1

最多儲存1677215個字元

6longtext

2^32-1

最多儲存4294967295個字元

7binary

2^8-1

儲存二進位制資料,而不是普通字串,最大字元數表示儲存的位元組數,儲存資料時,會在資料尾部追加0x00以保證長度為指定長度

8varbinary

2^8-1

儲存二進位制資料 序號

資料型別

值個數描述

1enum(x,y,z,etc.)

65535

enum列表中最多可列出65535個值

2set

64最多只能包含64個列表項 序號

資料型別

位元組數描述

1blob

2^16-1

儲存大型二進位制資料最多儲存65535位元組的資料(binary large objects)

2mediumblob

2^24-1

最多儲存16777215位元組的資料

3longblob

2^32-1

最多儲存4294967295位元組的資料 序號

資料型別

位元組數描述

1tinyint(size)

1size為儲存資料的最大位數,如1個位元組,共有8位,儲存資料範圍無符號:[0,2

82^8

28-1],有符號:[−27

−1

-2^7-1

−27−1,27−

12^7-1

27−1

],若size=3則最大儲存資料範圍:[0,2

32^3

23-1]和[−22

−1

-2^2-1

−22−1,22−

12^2-1

22−1]2

smallint(size)

2儲存最大資料16位,資料範圍[0,2^16-1] [ -2^15 -1,2^15 -1]

3mediumint(size)

3最大儲存資料24位,資料範圍[0,2^24-1] [ -2^23 -1,2^23 -1]

4int(size)

4最大儲存資料32位,資料範圍[0,2^32-1] [ -2^31 -1,2^31 -1]

5bigint(size)

8最大儲存資料64位,資料範圍[0,2^64-1] [ -2^63 -1,2^63 -1]

6float(size,d)

4最大儲存資料32位,資料範圍[0,2^32-1] [ -2^31 -1,2^31 -1]

7double(size,d)

8最大儲存資料64位,資料範圍[0,2^64-1] [ -2^63 -1,2^63 -1]

8decimal(size,d)

/最大儲存資料65位,資料範圍[0,2^65-1] [ -2^64 -1,2^64 -1] 序號

資料型別描述1

date()

日期,格式yyyy-mm-dd

2datetime()

日期和時間,格式yyyy-mm-dd hh:mm:ss

3timestamp()

時間戳,使用unix紀元(1970-01-01 00:00:00),格式:yyyy-mm-dd hh:mm:ss

4time()

時間,格式hh:mm:ss

5year()

2位或4位格式的年 序號

資料型別描述1

nchar(size)

儲存固定長度的unicode字串

2nvarchar(size)

儲存可變長度的unicode字串

3ntext

儲存大型unicode字串 序號

資料型別描述1

bit(size)

儲存基於位的資料,size指定位數,儲存空間單位為位元組,計算方式:(size+7)/8個位元組

2bool

儲存邏輯值,只有兩種狀態,true和false,或0和1

以學校為單位,設計師生相關的資料庫。 id

uuid

校名校訓

10001

學校1校訓1

20002

學校2校訓2 id

uuid

姓名年級

所屬學校

1s001

學生1年級1

0001

2s002

學生2年級2

0001 id

uuid

姓名年級

所屬學校

1t001

教師1年級1

0001

2t002

教師2年級2

0001

正規化僅作為設計資料庫表時的一種參考,實際應用中需要按需設計,不應僅侷限於正規化,mysql中,即使不滿足第三正規化,仍可執行,即,出現重複的資料仍可正常工作。

【參考文獻】

[1][2]

[3][4]

[5][6]

MySQL資料庫基礎 六 資料庫三正規化

資料庫的設計正規化是資料庫設計所需要滿足的規範,滿足這些規範的資料庫是簡潔的 結構明晰的,同時,不會發生插入 insert 刪除 delete 和更新 update 操作異常。反之則是亂七八糟,不僅給資料庫的程式設計人員製造麻煩,而且面目可憎,可能儲存了大量不需要的冗餘資訊。所謂第一正規化 1nf ...

資料庫 基礎 正規化

1 正規化 1nf 1 指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值。2 無重複的列。2nf 要求非主屬性完全依賴於主關鍵字,不存在不依賴於主關鍵字的屬性 3nf 最小冗餘,非主屬性只依賴於主關鍵字,沒有傳遞依賴。第一正規化 在任何乙個關聯式資料庫中,第一正規化 1nf 是對關係...

mysql資料庫正規化

減小資料的冗餘性 提高效率 屬性的原子性,每列不可再分解 如 出生年月日 年 月 日 便於後續修改 記錄的惟一性,說明乙個事物 屬性必須完全依賴於主鍵,不能存在部分依賴 如 說明了三個事物 學生資訊 系資訊 課程資訊 存在的部分依賴 姓名對學號存在部分依賴 系名對學號存在部分依賴 系主任對學號存在部...