以.7為例,在一個項目中的數據庫中建表
〇、建庫
統一字符集和排序規則
規則
庫的默認字符集選擇,表、字段默認上級
庫的排序規則選擇,表、字段默認上級
好處
統一排序規則,防止不必要的隱式轉換,庫級優先指定,表級、字段級默認上級。
[En]
rules to , -level first , table-level, field-level .
一、命名法
如果是大小寫敏感的數據庫【MySQL】就用蛇形命名法【小寫+下劃線】
如果是大小寫不敏感的數據庫【SQL 】就用大駝峰式【大小寫】
二、望文生義,自說明
在百度百科全書中,成語的意思是你不知道一個詞的確切含義或來源,但從字面上做一個牽強的解釋。
[En]
In Baidu , the idiom means that you don’t know the exact or of a word, but make a far- .
規則
在數據庫設計中,表名和字段名必須使用有意義的名詞,即自描述指定字段中不可重復的,每個名詞由有意義的英語或一般英語縮寫組成。識別方法:使用百度搜索域名中的詞,可以搜索到,那么命名就沒有問題了。
[En]
In , table names and field names must use nouns, that is, self-, and each noun is made up of or . : use Baidu to the words in the field name, can be , then the is no .
例子
公司可以使用 或者縮寫corp,不能用,下圖為搜索縮寫的結果
數量可以使用 或者縮寫qty,不能用、numb(糟糕的選擇,單詞意義是麻木的; 失去知覺的; 遲鈍的; 呆滯的)、num。下圖為縮寫搜索的結果
注意:縮寫必須是常規的和特定于行業的,否則字段寧愿太長而不是縮寫。非標準縮寫可能會導致表名的易用性和可維護性較差。對開發人員和維護人員非常不友好。
[En]
Note: must be and -, the would be too long than . Non- can lead to poor ease of use and of table names. to and .
好處
讓不了解表格結構的人,通過查看表格名稱和字段名稱,就可以直接知道表格和字段的含義。盡量不要查看評論,因為查看評論也需要時間,這極大地干擾了編碼流利性的發展。
[En]
So that who do not the of the table can know the of the table and field by at the table name and field name. Try not to check the , it also takes time to check the , which with the of .
注意:
1、字段名要簡短、易于理解、無歧義。
2、雖然已經望文生義、自說明,但是不意味著可以省略備注,每個表和字段還是有必要加上備注的,防止出現歧義。
三、字段統一規則
即使在不同的表中,具有相同含義的字段也應該具有相同的名稱和類型。
[En]
with the same be kept with the same name and type even in .
因此,發言應簡明扼要。如果相同的字段出現在不同的表中,只要整個數據庫搜索評論,就可以找到含義相同的字段,這樣字段就可以統一。
[En]
, the be and . If the same in , as long as the whole the , you can find the with the same , so that the can be .
好處
1、依舊是望文生義,當已經習慣于一個字段名,該字段在其他表中出現對開發識別字段意義有幫助
2、當兩個表的數據相互傳遞時,可以使用相同屬性名反射實現set、get方法,給開發提供便利
3、類型相同防止字段比較時出現隱式類型轉換
四、模塊分組
如果在系統設計中劃分了模塊,則每個模塊的表名必須加上相同的模塊縮寫前綴。
[En]
If are in the , the same must be added to the table name of each .
例子
字典表模塊中的
計量單位表
公司表
系統模塊中的
用戶表
角色表
好處
相同模塊的表在工具中查看時是排列在一起的。方便查找相關表。
五、主鍵名
主鍵id不能統一命名為id,有要加上表信息,即用戶表user主鍵
規則
不要使用統一id當主鍵名,要有修飾詞
例子
用戶屬于一家公司,即公司表的主鍵需要作為外鍵存儲在用戶表中[即使外鍵沒有建立]
[En]
The user to a , that is, the key of the table needs to be in the user table as the key [even if the key is not ]
用戶表使用user,公司表使用corp
如果在公司表中主鍵id使用id,但在user表中主鍵id也是id,必然user表的外鍵公司id 應該是,這樣會導致一個結果當user表和corp表聯結時,
聯結條件必須是user. = corp.id
如果聯結的表過多時表名使用別名a,b,u,c時極其容易寫錯指定字段中不可重復的,還不容易排查錯誤
而如果user表主鍵定義為,corp表主鍵定義為,user表中的公司id外鍵也定義為,
這樣當表聯結時,聯結條件寫為user.=corp.,聯結條件一目了然。提高了SQL的可讀性,節省了閱讀SQL時表聯結鍵的確認時間。
好處
節省開發時間,就算一次節省半秒,上千次之后也會節省十分鐘,作為一個項目經理或dba,就算你做不到給開發減輕工作量,也不能拖后腿吧。
符合字段統一原則。
六、盡量not null規則
在設計字段時盡量使用not null不可空。
數字類型默認0,字符串類型默認”零長度的字符串。
日期類型如果可以默認當前時間。
我知道作為開發人員嫌不可空麻煩,但是實際上可以在實體的方法中改寫
數字可以 ==null?0:;
字符串可以 name ==null?””:name.trim();
日期可以 dt==null?new ();
上面的書寫方法可以保證你的實體在被插入時不會為空,雖然開發和寫起來很麻煩,但好處很多。
[En]
The above of can that your will not be empty when it is , it is to and write, but there are many .
好處
優化很容易,雖然很多開發者不同意,但當你的項目真的需要高性能時,你會后悔,而且很多項目一開始很難優化,因為開發沒有考慮性能。為什么不提前盡你所能做到最好呢?
[En]
It is easy to , many , but you will when your needs high , and many are to at the the does not . Why not do the best you can do ahead of time.
節省空間,雖然可能只節省一個bit,但積少成多,好的性能都是一點一點積累出來的。
防止java出現空指針,好多空指針都是由于臟數據引起的。
NULL可能導致計算錯誤。例如(a,b),若a是NULL,結果為NULL。
如果時間字段無法默認時間,完全可以設置為null,不要在心里就反對null或者反對not null,我們是設計數據庫,不要出現黨*爭。
七、注意
當字段可以確定長度不超過一定數值時,建議使用char定長字符串類型,但如果整張表已經出現變長字段,那么都使用變長字段即可。
規則
如果可以都使用定長字符串,如果做不到就都使用變長字符串
好處
節省空間
易于優化
速度快,DBMS易于處理
八、范式
盡量符合三范式
規則
字段不可分割、表有主鍵、數據沒有允余、表間關系明確
好處
該范式的目的是使結構更加合理,消除存儲異常,最大限度地減少數據冗余。易于插入、刪除和更新。
[En]
The of the is to make the more , and data . Easy to , , and .
范式是給關系型數據庫創立的。對于增刪改查四種操作總體來說性能和易用性最佳。如果你們的表只需要插入和查詢,或者只需要插入和清空,CRUD四種操作不全需要時,完全可以違反范式。具體情況具體分析,沒有必要在心里就反對范式或者嚴格遵守范式。我們是設計數據庫,不是教條主義,不要出現黨*爭。
九、固定字段
刪除標志、創建時間、修改修改、創建人id、修改人id五個字段為必須字段。
規則
刪除標志默認為未刪除的值,
創建時間設置為當前時間,
修改時間設置為數據修改時更新,
創建人設置id默認為0
創建人設置id默認為0
好處
在大多數情況下,這些字段是必需的,除非您不需要保留已刪除的數據和不需要刪除身份,在這種情況下,幾乎不可能在項目開始時判斷需要邏輯刪除還是物理刪除。
[En]
In most cases, these are you do not need to the data and do not need to the , in which case it is to tell a or a is at the of the .
創建時間、修改時間、創建人、修改人沒必要解釋
十、狀態值規則
狀態值,盡量不使用0,一般選擇10,20,30,40等,
好處
防止需求突然加中間狀態,原來定義的是0,1,2,3連續的狀態,突然需要在2,3之間加個新狀態,只能使用4,這樣會對開發理解造成障礙,而如果初始就使用10,20,30,40作為狀態,突然需要在20,30之間添加新的狀態,完全可以使用25,即好理解又符合邏輯。
0對于前端開發不友好。
最后、上線前統一字符集和排序規則
項目上線之前執行以下SQL,會查詢出指定庫下的所有字段的排序規則和字符集,一定要統一后,再上線
其他老生常談的問題可以自己查找,比如建議使用自增列做主鍵等
,,,
from . where = ‘庫名’ and = ‘’
好處
防止字符串比較時出現隱式轉換。
總結、好的設計會提高性能,提升便利
在保證性能的基礎上,方便開發、易于運維、易于交接。
上述原則不是鐵律。如果一些原則導致性能急劇下降,使用起來非常不方便,可以完全忽略這些原則,分析具體情況。世界上沒有普遍的規則。
[En]
The above are not iron laws. If some lead to a sharp in and make it very to use, you can the and the . There is no rule in the world.
:
: 一劍破萬法
Title: 我設計數據庫常用的幾個原則
相關閱讀Title: 安裝 安裝 CE
警告:切勿在沒有配置 YUM 源的情況下直接使用 yum 命令安裝 .
準備工作系統要求
CE 支持 64 位版本 7,并且要求內核版本不低于 3.10。 7 滿足最低內核的要求,但由于內核版本比較低,部分功能(如 存儲層驅動)無法使用,并且部分功能可能不太穩定。
卸載舊版本
舊版本的 稱為 或者 -,使用以下命令卸載舊版本:
$ sudo yum remove docker \
docker-client \
docker-client-latest \
docker-common \
docker-latest \
docker-latest-logrotate \
docker-logrotate \
docker-selinux \
docker-engine-selinux \
docker-engine
使用 yum 安裝
執行以下命令安裝依賴包:
$ sudo yum install -y yum-utils \
device-mapper-persistent-data \
lvm2
針對國內網絡問題,強烈建議使用國內資源。請檢查筆記中的官方來源。
[En]
In view of , it is to use . check the in the notes.
執行下面的命令添加 yum 軟件源:
$ sudo yum-config-manager \

--add-repo \
https://mirrors.ustc.edu.cn/docker-ce/linux/centos/docker-ce.repo
# 官方源
# $ sudo yum-config-manager \
# --add-repo \
# https://download.docker.com/linux/centos/docker-ce.repo
如果需要最新版本的 CE 請使用以下命令:
$ sudo yum-config-manager --enable docker-ce-edge
如果需要測試版本的 CE 請使用以下命令:
$ sudo yum-config-manager --enable docker-ce-test
安裝 CE
更新 yum 軟件源緩存,并安裝 -ce。
$ sudo yum makecache fast
$ sudo yum install docker-ce
使用腳本自動安裝
在測試或開發環境中 官方為了簡化安裝流程,提供了一套便捷的安裝腳本, 系統上可以使用這套腳本安裝:
$ curl -fsSL get.docker.com -o get-docker.sh
$ sudo sh get-docker.sh --mirror Aliyun
執行這個命令后,腳本就會自動的將一切準備工作做好,并且把 CE 的 Edge 版本安裝在系統中。
啟動 CE
$ sudo systemctl enable docker
$ sudo systemctl start docker
測試 是否安裝正確
run hello-world
若能正常輸出以上信息,則說明安裝成功。
:
: 微笑帶你去
Title: 安裝 CE