資料庫設計 建表規範

2022-02-27 01:11:53 字數 2671 閱讀 5868

/*文章整理自網路*/

原文:1.

2.3.

4.

基本建表規範:

1.自增主鍵一般都需要設定(`id` int unsigned not nullauto_increment);

2.不定長字串長度使用varchar型別,需要考慮實際業務最長長度的基礎上擴容20%到40%為宜,且長度取2的指數長為宜(64,128,256等);

3.定長長度使用char型別,長度直接取實際長度即可,類似於手機號字段;

4.所有字段除了軟刪除字段(delete_time),都需要設定為not null,並且設定預設值(字串預設值為'',

整型預設值為0);

5.基本所有的字段,表名都加上備註,除了自增主鍵,建立時間,更新時間之類的通用字段。

6.表結構需指定儲存引擎,預設字符集。

7.關於索引的建立,建議只建立其它表在這個的表的外來鍵和查詢頻繁的字段。其它欄位在業務擴充套件時我會及時跟進並設定。

8.表名和欄位名以英文加下劃線隔分,欄位中英文單詞以不超過三個單詞為宜。

9.狀態字段設定為tinyint,同時備註寫清楚不同數字代表的型別。

正規化標準:

基本表及其字段之間的關係, 應盡量滿足第三正規化。但是,滿足第三正規化的資料庫設計,往往不是最好的設計。

為了提高資料庫的執行效率,常常需要降低正規化標準:適當增加冗餘,達到以空間換時間的目的。

冗餘:主鍵與外來鍵在多表中的重複出現,不屬於資料冗餘,這個概念必須清楚,事實上有許多人還不清楚。

非鍵字段的重複出現, 才是資料冗餘!而且是一種低階冗餘,即重複性的冗餘。高階冗餘不是欄位的重複出現,而是欄位的派生出現。

檢視:對於某些與國家政治、經濟、技術、軍事和安全利益有關的資訊系統,檢視的作用更加重要。這些系統的基本表完成物理設計之後,

立即在基本表上建立第一層檢視,這層檢視的個數和結構,與基本表的個數和結構是完全相同。並且規定,所有的程式設計師,一律只准在檢視上操作。

(問題:可以直接對檢視進行update,delete操作嗎? 答:某些情況可以,有些情況不可以,例如join

建檢視:create view a as select * from b)

只有資料庫管理員,帶著多個人員共同掌握的「安全鑰匙」,才能直接在基本表上操作。

防止資料庫設計打補丁的方法是「三少原則」

(1) 乙個資料庫中表的個數越少越好。只有表的個數少了,才能說明系統的e--r圖少而精,去掉了重複的多餘的實體,形成了對客觀世界的高度抽象,進行了系統的資料整合,防止了打補丁式的設計;

(2) 乙個表中組合主鍵的字段個數越少越好。因為主鍵的作用,一是建主鍵索引,二是做為子表的外來鍵,所以組合主鍵的字段個數少了,不僅節省了執行時間,而且節省了索引儲存空間;

(3) 乙個表中的字段個數越少越好。只有欄位的個數少了,才能說明在系統中不存在資料重複,且很少有資料冗餘,更重要的是督促讀者學會「列變行」,這樣就防止了將子表中的字段拉入到主表中去,

在主表中留下許多空餘的字段。所謂「列變行」,就是將主表中的一部分內容拉出去,另外單獨建乙個子表。這個方法很簡單,有的人就是不習慣、不採納、不執行。

資料庫設計的實用原則是:在資料冗餘和處理速度之間找到合適的平衡點。「三少」是乙個整體概念,綜合觀點,不能孤立某乙個原則。該原則是相對的,不是絕對的。「三多」原則肯定是錯誤的。

試想:若覆蓋系統同樣的功能,一百個實體(共一千個屬性) 的e--r圖,肯定比二百個實體(共二千個屬性) 的e--r圖,要好得多。

提倡「三少」原則,是叫讀者學會利用資料庫設計技術進行系統的資料整合。資料整合的步驟是將檔案系統集成為應用資料庫,將應用資料庫集成為主題資料庫,將主題資料庫集成為全域性綜合資料庫。

整合的程度越高,資料共享性就越強,資訊孤島現象就越少,整個企業資訊系統的全域性e—r圖中實體的個數、主鍵的個數、屬性的個數就會越少。

提倡「三少」原則的目的,是防止讀者利用打補丁技術,不斷地對資料庫進行增刪改,使企業資料庫變成了隨意設計資料庫表的「垃圾堆」,或資料庫表的「大雜院」,

最後造成資料庫中的基本表、**表、中間表、臨時表雜亂無章,不計其數,導致企事業單位的資訊系統無法維護而癱瘓。

「三多」原則任何人都可以做到,該原則是「打補丁方法」設計資料庫的歪理學說。「三少」原則是少而精的原則,它要求有較高的資料庫設計技巧與藝術,不是任何人都能做到的,因為該原則是杜絕用「打補丁方法」設計資料庫的理論依據

提高資料庫執行效率的辦法

在給定的系統硬體和系統軟體條件下,提高資料庫系統的執行效率的辦法是:

(1) 在資料庫物理設計時,降低正規化,增加冗餘, 少用觸發器, 多用儲存過程。

(2) 當計算非常複雜、而且記錄條數非常巨大時(例如一千萬條),複雜計算要先在資料庫外面,以檔案系統方式用c++語言計算處理完成之後,最後才入庫追加到表中去。這是電信計費系統設計的經驗。

(3) 發現某個表的記錄太多,例如超過一千萬條,則要對該錶進行水平分割。水平分割的做法是,以該錶主鍵pk的某個值為界線,將該錶的記錄水平分割為兩個表。

若發現某個表的字段太多,例如超過八十個,則垂直分割該錶,將原來的乙個表分解為兩個表。

(4) 對資料庫管理系統dbms進行系統優化,即優化各種系統引數,如緩衝區個數。

(5) 在使用面向資料的sql語言進行程式設計時,盡量採取優化演算法。

總之,要提高資料庫的執行效率,必須從資料庫系統級優化、資料庫設計級優化、程式實現級優化,這三個層次上同時下功夫。

資料庫建表設計規範

mysql 的字符集支援涉及兩個方面 字符集 character set 和排序方式 collection 對字符集的支援可以細化到四個層次 伺服器 server 資料庫 database 資料表 table 連線 connection 連線mysql 可通過如下命令檢視字符集的詳情 對資料庫的命名...

資料庫建表規範

1 innodb禁止使用外來鍵約束,可以通過程式層面保證。2 儲存精確浮點數必須使用decimal替代float和double。3 整型定義中無需定義顯示寬度,比如 使用int,而不是int 4 4 不建議使用enum型別,可使用tinyint來代替。5 盡可能不使用text blob型別,如果必須...

資料庫建表 SQL 索引規範

強制 1 儲存引擎必須使用innodb 解讀 innodb支援事物 行級鎖 併發效能更好,cpu及記憶體快取頁優化使得資源利用率更高。強制 2 每張表必須設定乙個主鍵id,且這個主鍵id使用自增主鍵 在滿足需要的情況下盡量短 除非在分庫分表環境下。解讀 由於innodb組織資料的方式決定了需要有乙個...