主鍵盡量不要使用業務字段:資料和主鍵索引是繫結在一起的,業務字段更新頻繁,一旦修改,索引也要跟著變;使用自增主鍵效能會快很多,主鍵自增就會讓資料順序新增到表中。
表的關係分為一對
一、一對多、多對多。當一張表(a)中的一條記錄能夠對應另外一張表(b)中的多條記錄,同時b表中的一條記錄也能對應a表中的多條記錄,這就是多對多的關係。
在資料庫設計的時候,當兩張表存在多對關係時,應設計第三張表,將多對多關係轉化為一對多的關係。
在資料庫設計時,為了查詢效率,可以做冗餘字段設計(空間換時間的思想,屬於一種反正規化設計)。
三正規化設計:
目的:減少冗餘欄位和重複的資料
特點:字段具有原子性,不可拆分;依賴於全部主鍵,而非部分主鍵反正規化設計目的;只依賴於主鍵,非主鍵字段互不依賴。
反正規化設計目的:滿足業務邏輯要求,提高查詢速度
4.1整型
int(n)
例:int(3)和int(6)有什麼區別?
int(3)和int(6)都可以顯示6位以上的整數,但是當數字不足3位或6位時,前面會用0補齊。
bigint(n)
多用於主鍵,bigint(20)unsigned顯示20位長度;unsigned表示沒有符號,數字範圍將更大。
tinyint(n)
多用於邏輯刪除字段
4.2字串char與varchar的選擇
char不可變,查詢效率高,可能造成儲存浪費
* char(5)----》 『abc』 不夠5位,也用空字串佔位
varchar可變,查詢效率不如char,但是節省空間
*varchar(5)----》『abc』,不夠5位,實際幾位就佔幾位的空間
4.3json型別
mysql5.7版本後longtext型別新增了對json字串的支援
4.4是否為空not null及預設值default
主鍵和被索引的字段不能為null:索引不儲存null,查詢時不會被統計;對於字段一定不要忘了考慮其是否可以設定預設值。
4.5常見mysql資料型別
類 型 大 小 描 述
cahr(length) length位元組 定長字段,長度為0~255個字元
varchar(length) string長度+1位元組或string長度+2位元組 變長字段,長度為0~65 535個字元
tinytext string長度+1位元組 字串,最大長度為255個字元
text string長度+2位元組 字串,最大長度為65 535個字元
mediumint string長度+3位元組 字串,最大長度為16 777 215個字元
longtext string長度+4位元組 字串,最大長度為4 294 967 295個字元
tinyint(length) 1位元組 範圍:-128127,或者0255(無符號)
smallint(length) 2位元組 範圍:-32 768~32 767,或者0~65 535(無符號)
mediumint(length) 3位元組 範圍:-8 388 608~8 388 607,或者0~16 777 215(無符號)
int(length) 4位元組 範圍:-2 147 483 648~2 147 483 647,或者0~4 294 967 295(無符號)
bigint(length) 8位元組 範圍:-9 223 372 036 854 775 808~9 223 372 036 854 775 807,或者0~18 446 744 073 709 551 615(無符號)
float(length, decimals) 4位元組 具有浮動小數點的較小的數
double(length, decimals) 8位元組 具有浮動小數點的較大的數
decimal(length, decimals) length+1位元組或length+2位元組 儲存為字串的double,允許固定的小數點
date 3位元組 採用yyyy-mm-dd格式
datetime 8位元組 採用yyyy-mm-dd hh:mm:ss格式
timestamp 4位元組 採用yyyymmddhhmmss格式;可接受的範圍終止於2023年
time 3位元組 採用hh:mm:ss格式
enum 1或2位元組 enumeration(列舉)的簡寫,這意味著每一列都可以具有多個可能的值之一
set 1、2、3、4或8位元組 與enum一樣,只不過每一列都可以具有多個可能的值
5.1索引的優缺點
優點:增加查詢速度
缺點:增加資料庫的儲存空間;減慢增刪改速度
5.2索引
mysql中廣義索引包含以下:
主鍵primary key
外來鍵foreign key
索引key/index(狹義的索引)
普通索引
唯一約束uniqu
聯合索引
資料庫設計 設計資料庫之前
1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...
資料庫設計 設計資料庫之前
1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...
資料庫設計 設計資料庫之前
1.考察現有環境 在設計乙個新資料庫時,你不但應該仔細研究業務需求而且還要考察現有的系統。大多數資料庫 專案都不是從頭開始建立的 通常,機構內總會存在用來滿足特定需求的現有系統 可能沒有實 現自動計算 顯然,現有系統並不完美,否則你就不必再建立新系統了。但是對舊系統的研究 可以讓你發現一些可能會忽略...