[資料庫環境介紹]
通常來講,各個網際網路公司的資料庫分為5個資料庫環境:
1. dev : 開發環境, 開發可讀寫,可修改表結構; 常用的163的資料庫表; 開發人員可以修改表結構, 可以隨意修改其中的資料; 但是需要保證不影響其他開發同事;
2. qa : 測試環境, 開發可讀寫, 開發人員可以通過工具修改表結構;
3. sim: 模擬環境, 開發可讀寫, 通過web平台;發起上線請求時,會先在這個環境上進行預執行, 這個環境也可供部署上線演練或壓力測試使用 可以讀寫;
4. real: 生產資料庫從庫(準實時同步),唯讀環境,不允許修改資料,不允許修改表結構; 供線上問題查詢,資料查詢等使用;
這些環境的機器,一定要做到許可權劃分明確,讀寫帳號分離,並且有辨識度,能區分具體業務。例如使用者名稱w_wap, r_wap 能看出來,讀寫帳號是wap應用的。
[資料庫命名規範]
1. 盡量簡潔明義,能夠一眼看出來這個資料庫是用來做什麼的;
2. 使用名詞作為資料庫名稱,並且只用英文,不用中文拼音;
3. 使用英文本母,全部小寫,控制在3-7個字母以內;
4. 如果有多個單詞,則使用下劃線隔開,不建義駝峰命名;
例如,每個公司都有crm業務,那就叫做xx_crm, 字符集統一utf8。字符集踩過的坑很多,為了通用性統一utf8。
create
database xx_crm default
character
set=utf8;
[表命名規範]
1. 具備統一字首,對相關功能的表應當使用相同字首,如acl_***,house_***,ppc_***;其中字首通常為這個表的模組或依賴主實體物件的名字,通常來講表名為:業務_動作_型別,或是業務_型別;
2. 表名使用英文小寫單詞,如果有多個單詞則使用下劃線隔開;
3.表名簡介,使用常見單詞,避免使用長單詞和生僻詞;
4. 表引擎取決於實際應用場景及當前資料庫中的已經存在的儲存引擎;日誌及報表類表建議用myisam,與交易,審核,金額相關的表建議用innodb引擎。總體來講資料庫預設innodb;
5. 資料表必須有主鍵,且建議均使用auto_increment的id作為主鍵(與業務無關),和業務相關的要做為唯一索引;
6. 預設使用utf8字符集(由於資料庫定義使用了預設,資料表可以不再定義,但為保險起見,建議都寫上);
7. 所有的表都必須有備註,寫明白這個表中存放的資料內容;
8. 預估表資料量,如果資料量較大(超過500w)則需要考慮分表策略。可以等量均衡分表或根據業務規則分表均可。要分表的資料表必須與dba商量分表策略;
9. 職責相近的表,命名規則應該相同;如合同申請,賬戶資訊,交友相關等;
create
table
`house_refresh_log` (
`id`
int(11) not
null auto_increment comment
'自增id',
`fangid`
int(11) not
null
comment
'房貼子id',
`refresh_time`
int(11) not
null
comment
'重新整理時間',
primary key (`id`),
unique
key`fangid` (`fangid`)
) engine=innodb
default
charset=utf8 comment='房重新整理記錄表'
[字段命名規範]
1. 資料庫字段命名與表名命名類似:
2. 使用小寫英文單詞,如果有多個單詞使用下劃線隔開;
3. 使用簡單單詞,避免生僻詞;
4. 字段應當有注釋,描述該字段的用途及可能儲存的內容,如列舉值則建議將該字段中使用的內容都定義出來;
5. 是別的表的外來鍵均使用***_id的方式來表明;
6. 表的主鍵一般都約定成為id,自增型別;
7. 時間字段,除特殊情況一律採用int來記錄unix_timestamp;
8. 網路ip欄位,除特殊情況一律用bigint來記錄inet_aton值;
9. 所有字段,均為非空,最好顯示指定預設值;
10. 有些驅動對tinyint支援不夠好,通常建義按容量來選擇字段;
11. text欄位盡量少用,或是拆到冗餘表中;
create
table
`wanted_post` (
`id`
int(10) not
null auto_increment,
`puid`
int(10) unsigned
notnull,
`user_id`
int(10) not
null
comment
'發貼使用者的id',
`username`
varchar(50) not
null
comment
'發貼使用者的使用者名稱',
`city`
smallint(4) not
null
comment
'所在城市',
`ip`
bigint(14) not
null
comment
'發帖人的ip',
`district_id` tinyint(2) not
null
comment
'所在區域的id',
`district_name`
varchar(20) not
null
comment
'行政區名字',
`street_id` tinyint(2) not
null
comment
'所在街道(地標)的id',
`street_name`
varchar(20) not
null
comment
'小區名字',
`title`
varchar(255) not
null
comment
'帖子的標題',
`description`
text
notnull
comment
'帖子詳情描述',
`post_at`
int(11) not
null
comment
'使用者發帖時間,資料建立的時間,使用整型儲存',
`refresh_at`
int(11) not
null
comment
'帖子被修改的時間,整型儲存',
`show_time`
int(11) not
null
comment
'帖子顯示時間',
`age_max`
int(11) not
null
default
'0'comment
'招聘最小年齡',
`age_min`
int(11) not
null
default
'0'comment
'招聘最大年齡',
`post_refresh_at`
int(11) not
null
comment
'重新整理時間',
primary key (`id`),
unique
key`idx_puid` (`puid`),
key`user_id_index` (`user_id`),
key`post_at_index` (`post_at`),
key`refresh_at_index` (`refresh_at`),
key`show_time_index` (`show_time`)
) engine=innodb auto_increment=55295
default
charset=utf8 comment='招聘帖子表'
web系統備份mysql web資料庫備份恢復
using system using system.collections.generic using system.linq using system.web using system.web.ui using system.web.ui.webcontrols using system.data...
資料庫 資料庫的物理設計
資料庫在物理裝置上的儲存結構與訪問方法稱為資料庫的物理結構,它依賴於給定的計算機系統。為乙個給定的邏輯資料模型選取乙個最合適應用要求的物理結構的過程,稱為資料庫的物理設計。物理設計的目的是有效地實現邏輯模式,確定所採取的儲存策略。此階段是以邏輯設計的結構作為輸入,並結合具體dbms的特點與儲存裝置特...
資料庫的設計
什麼是資料庫設計?資料庫設計就是規劃和結構化資料庫中的資料物件以及這些資料物件之間關係的工程。在需求分析階段 收集資訊 標識物件 實體 標識每個物件需要儲存的詳細資訊 屬性 標識物件 實體 之間的關係。在概要設計階段 繪製e r 實體 關係 圖 在詳細設計階段 規範化e r圖 把e r圖轉換為多張表...