MySQL 資料庫設計初步規範V1.0,mysqlv1.0

來源:互聯網
上載者:User

MySQL 資料庫設計初步規範V1.0,mysqlv1.0


 

資料庫設計規範:

1,表設計規範1.1關於表設計

a)         表名、列名必須有注釋。

b)         命名應使用富有意義的英文詞彙或者縮寫,多個單片語成的,全部大寫,以"_"分隔開來,只能使用英文字母,數字和底線,不留空格。比如USER_DETALL,不允許使用關鍵字TYPE或者STATUS等來作為欄位名。

c)         命名長度不超過15個字元為宜(避免超過20),應該反映資料集所在的業務範圍,或者業務功能,如POWER_USER(使用者中心)等。

d)         當欄位類型為枚舉或者布爾型時,使用 CHAR(1)(或者CHAR(2))類型,填寫預設值,狀態欄位的預設值不能為null一般是設定成0或者-1,狀態欄位的描述寫成 comment '團購券狀態:1.已購買;2.已使用;3.退款中;4已退款'。

 

e)         在設計時候盡量包含日期欄位:CREATE_DATE(建立日期),UPDATE_DATE(更新日期)等。mysql中對日期約定一種錄入方式,如'2014-12-31 00:00:00.0'

f)          預設值,數字類型預設值為0,字串預設值為’’,日期預設值為’1900-01-01 00:00:00.0’。

g)         主鍵欄位ID用bigint,如果create語句中有AUTO_INCREMENT=6653864標示,請去掉。

h)         日期欄位的預設值也不能為null,一般設定成1970-12-31 00:00:00.0。

 

i)           手機欄位,郵箱欄位等會被檢索的欄位不允許為null,預設值為空白串’’。數字類型欄位不允許為null預設值為0。

j)           預設字元編碼為utf8,預設儲存引擎為INNODB

PS:每個表必須有主鍵欄位,必須有錄入日期欄位並且值不允許為NULL。

1.2 索引設計

1)         普通索引,以IDX_開頭串連欄位名字。

2)         值範圍重複的比例少的,建立索引欄位,比如  CREATE_DATE(錄入時間)欄位;值範圍重複比率的欄位不需要建立索引比如IS_RETURN(是否已退款)欄位。

3)         主鍵欄位不需要建立unique key,主鍵欄位也不需要單獨建索引。

4)         WHERE條件後面的經常查詢的欄位,需要加索引,比如ORDER_GOODS 表的ORDER_SN(商品號)等。

5)         範圍欄位不需要加索引,比如SHOP_MALL表的IS_DEL欄位等。

6)         建立索引的欄位,要求不能有null值,否則會影響索引的效率。

 

1.3表結構範例

建表語句範例:

CREATE TABLE `SHOP_GAY` (

  `ID` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '店鋪ID',

  `SHOP_NAME` VARCHAR(50) DEFAULT '' COMMENT '店鋪名稱',

  `LEGAL_PERSON_MOBILE` VARCHAR(11) DEFAULT NULL COMMENT '法人行動電話',

  `SCORE` BIGINT(20) DEFAULT 0 COMMENT '積分',

  ......

  `MANAGER_NAME` VARCHAR(20) DEFAULT '' COMMENT '店長姓名',

  `BRIEF` VARCHAR(500) DEFAULT '' COMMENT '店鋪簡介',

  `HAS_WAREHOUSE` CHAR(1) DEFAULT '0' COMMENT '是否有倉庫, 0:沒有; 1:有 ',

  `DESCRIPTION_FIT` DECIMAL(3,1) DEFAULT 0 COMMENT '描述相符--通過對所有訂單商品的評價計算平均值取一位小數得到',

  `BACKGROUND` VARCHAR(200) DEFAULT '' COMMENT '店鋪標題圖片',

  `CREATED_DATE` TIMESTAMP DEFAULT CURRENT_TIMESTAMP COMMENT '建立時間',

  `UPDATED_DATE` DATETIME DEFAULT '1970-12-31 00:00:00.0' COMMENT '更新時間',

  PRIMARY KEY (`ID`),

  KEY IDX_MOB(LEGAL_PERSON_MOBILE),

  KEY IDX_CRETIME(CREATED_DATE),

  KEY IDX_UPTIME(UPDATED_DATE)

) ENGINE=INNODB DEFAULT CHARSET=utf8 COMMENT='GAY店鋪'

 

添加欄位範例:

ALTER TABLE AUTH_MALL ADD COLUMN SHORT_NAME VARCHAR(20) DEFAULT '' COMMENT '廣場名簡寫' AFTER FULL_NAME;

 

修改表欄位範例:

ALTER TABLE GATEWAY_PAYMENT_ORDER MODIFY COLUMN STAT varchar(2)  DEFAULT '0' 

comment '交易狀態   0:待支付/退款,1:等待第三方渠道回調,2:支付/退款成功,3:支付/退款失敗,4:支付/退款確認成功,5:支付/退款確認失敗,6;交易關閉,7:待收款(如果是此狀態-需要確認收款帳號是否正常),8:支付/退款確認成功-不可再進行其他動作,9:驗簽失敗,10:同步確認/買家已付款-等待賣家發貨WAIT_SELLER_SEND_GOODS,11:同步確認/賣家已發貨等待買家確認WAIT_BUYER_CONFIRM_GOODS' AFTER DESCRIPTION;

 

 

2,SQL編寫

2.1,盡量使用單表查詢,避免多表JOIN。JOIN的後續ON條件不能用OR判斷,比如SELECT A.C1,B.C2 FROM A,B ON(A.ID=B.PID OR B.TAG=A.TAR_GET);  OR效能非常低,PS:我們線上一些開啟緩慢的功能模組都是因為這個OR的寫法導致的。

 

2.2,寫到應用程式的SQL語句,禁止一切DDL操作,例如:create,drop,alter,grant,remove;如有特殊需要,請與dba協商同意方可使用。

 

2.3,寫SQL的時候一定要給每個欄位指定表名做首碼。比如select ub.id,ub.name from user_business ub where ub.create_date > '';在iBatis的SQLMap檔案中綁定變數使用"#var_name"表示,替代變數使用"$var_name$";所有需要動態order by條件的查詢,在使用替代變數過程中,需要將可能傳入的內容以枚舉寫死在代碼中,禁止接受外部傳入內容。

 

2.4,如果需要事務的支援,在使用了innodb的情況下,在資料庫連接時候,先關閉自動認可,如: set auto_commit=0; 在寫java代碼的時候,在有交易處理的情況下,執行insert、delete、update後,commit;在exception代碼塊,必須寫上rollback操作。

 

2.5,不要寫select *類似的代碼,需要制定的欄位名。

 

2.6,mysql的日期和字元是相同的,所以不需要像oracle那樣做另外的轉換,比如:

select  e.username from employee e where e.birthday>='1998-12-31 11:30:45'。

 

2.7,避免在where字句中對欄位施加函數,如果是業務要求的除外,但需要在編寫時候諮詢DBA。比如DATE_FORMAT(p.PAYMENT_DATE, '%Y-%m-%d') >= DATE_FORMAT('2014-10-01', '%Y-%m-%d'),就需要改正掉。

 

2.8,避免多餘的排序,使用group by的時候,預設會進行排序,當你不需要排序的時候,可以使用order by null;

 

2.9,當表串連時候,用於串連的兩個表的欄位如果資料類型不一致,則必須在一邊加上類型轉換的函數。杜絕mysql做隱式類型轉換的情況。

 

2.10,禁止在應用程式裡面執行對資料庫的批次更新sql操作,如果需要請發email由dba判斷在合適的時間段裡面在IDC的庫上手動人工執行。

3,基本原則

PS:表結構變更須由庫表所屬團隊發起。

 

1,所有在測試環境執行的表結構變更的SQL必須經過DBA review。


2,不允許物理刪除,不得使用預存程序、觸發器以及視圖,特殊情況和業務情境申請DBA

 

PS:所有的規範都是適應自己的業務情境的,歡迎大家提出更好的建議,自己也會根據業務的發展,不斷總結擴充最契合的資料庫規範。

----------------------------------------------------------------------------------------------------------------

<著作權,文章允許轉載,但必須以連結方式註明源地址,否則追究法律責任!>
原部落格地址:  http://blog.itpub.net/26230597/viewspace-1312184/
原作者:黃杉 (mchdba)

----------------------------------------------------------------------------------------------------------------


 



急需MySql資料庫設計規範

1. 資料表命名規範
模組名縮寫_儲存資訊[_儲存資訊子類](多個單詞用底線分隔),全部小寫,例如:b2c_goods_type
2. 欄位命名規範
儲存資訊屬性(多個單詞用底線分隔),全部小寫,命名規則只來自於業務,盡量表達出列的含義。
例如:goods_id
3. 欄位類型規範。
規則:用盡量少的儲存空間來存 數一個欄位的資料.
比如能用int的就不用char或者varchar
能用tinyint的就不用int
能用 varchar(20)的就不用varchar(255)
時間戳記欄位盡量用int型,如 created:表示從 '1970-01-01?08:00:00'開始的int秒數,採用英文單詞的過去式;gmtCreated:表示datetime類型的時間,即形如 '1980-01-01?00:00:00'的時間串,Java中對應的類型為Timestamp
日期:用date
時間:用time
數字格式的用:int、tinyint、mediumint、smallint、bigint根據實際情況選擇
字串:用char、varcahr;
文本:用text
金額:用float
 
MySql 資料庫設計問題

不明白你為什麼要建立語言language、關係表relationtab,就前面兩個就可以了吧。

軟體表soft:
欄位:sid、sname軟體名稱 、size大小 、ver 版本 、lang 語言、 cid軟體分類、desc描述、URL地址、 IMG地址
主鍵sid,外鍵cid

分類表cls:
欄位:cid、cname類別名稱、pre上級分類
主鍵cid,外鍵pre
pre參照本表的cid,如果pre為0表示一級分類
樣本資料:
cid cname pre
1   系統軟體 0
2  應用軟體 0
3  作業系統 1
4  資料庫系統 1
 

相關文章

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.