新聞中心
如何設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)? 數(shù)據(jù)庫設(shè)計(jì)建議和技巧

創(chuàng)新互聯(lián)建站是一家專業(yè)提供尼瑪企業(yè)網(wǎng)站建設(shè),專注與成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、外貿(mào)網(wǎng)站建設(shè)、H5開發(fā)、小程序制作等業(yè)務(wù)。10年已為尼瑪眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專業(yè)網(wǎng)絡(luò)公司優(yōu)惠進(jìn)行中。
數(shù)據(jù)庫是現(xiàn)代企業(yè)不可或缺的基礎(chǔ)設(shè)施之一,其正確的設(shè)計(jì)和實(shí)施至關(guān)重要。設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)是數(shù)據(jù)庫設(shè)計(jì)中最重要的部分之一。高效的數(shù)據(jù)庫表結(jié)構(gòu)能大大提高數(shù)據(jù)庫的可靠性和性能。
本文旨在為讀者提供一些數(shù)據(jù)庫設(shè)計(jì)建議和技巧,幫助讀者設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)。
1.設(shè)計(jì)規(guī)范和標(biāo)準(zhǔn)化
規(guī)范和標(biāo)準(zhǔn)化是數(shù)據(jù)庫設(shè)計(jì)的基礎(chǔ)。在設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu)時,應(yīng)該遵循一系列標(biāo)準(zhǔn)和規(guī)范,這些標(biāo)準(zhǔn)和規(guī)范包括但不限于:
– 表名和字段名應(yīng)該易于理解和表達(dá)含義;
– 表和字段應(yīng)該使用小寫字母和下劃線命名;
– 表中應(yīng)該有一個唯一標(biāo)識符字段;
– 表中應(yīng)該有一個主鍵字段;
– 表間應(yīng)該使用外鍵字段進(jìn)行關(guān)聯(lián);
– 應(yīng)該盡可能使用數(shù)據(jù)庫約束(主鍵、唯一鍵、外鍵、默認(rèn)值、非空值、檢查約束等)來保證數(shù)據(jù)的完整性和準(zhǔn)確性;
– 不使用特殊字符或關(guān)鍵字作為表名或字段名;
2.避免過度設(shè)計(jì)
過度設(shè)計(jì)是數(shù)據(jù)庫設(shè)計(jì)中一種常見的問題,它會導(dǎo)致數(shù)據(jù)庫結(jié)構(gòu)復(fù)雜,難以維護(hù)和理解。因此,數(shù)據(jù)庫設(shè)計(jì)師必須避免過度設(shè)計(jì)。
在設(shè)計(jì)數(shù)據(jù)庫時,應(yīng)該始終記住以下原則:
– 最小化表的數(shù)量;
– 最小化表中字段的數(shù)量;
– 最小化字段中的數(shù)據(jù)類型;
– 最小化索引的數(shù)量。
3.選擇合適的數(shù)據(jù)類型
選擇合適的數(shù)據(jù)類型對于提高數(shù)據(jù)庫性能非常重要。當(dāng)選擇數(shù)據(jù)類型時,應(yīng)該考慮以下因素:
– 數(shù)據(jù)類型應(yīng)該盡可能小。使用較小的數(shù)據(jù)類型可以節(jié)省存儲空間并提高查詢的速度。例如,如果需要存儲年份,使用INT更大只需要4個字節(jié)。
– 應(yīng)該使用正確的數(shù)據(jù)類型。當(dāng)涉及到日期和時間時,使用日期和時間類型,而不是字符串類型。當(dāng)涉及到金額時,使用DECIMAL而不是FLOAT類型,因?yàn)镈ECIMAL能夠提供更高的精度。
– 應(yīng)該使用統(tǒng)一的數(shù)據(jù)類型。同一表中,應(yīng)該使用相同的數(shù)據(jù)類型來存儲相同類型的數(shù)據(jù)。
4.使用索引
索引對于提高數(shù)據(jù)庫查詢速度非常重要。當(dāng)使用索引時,應(yīng)該考慮以下因素:
– 應(yīng)該只在需要時才使用索引。使用索引會增加數(shù)據(jù)插入和更新的時間,因此應(yīng)該僅在查詢過程中需要它們時使用。
– 應(yīng)該僅對查詢頻繁的列使用索引。
– 應(yīng)該僅為小型表使用索引。大型表的索引會占用大量存儲空間并且降低查詢性能。
– 應(yīng)該使用聯(lián)合索引來提高性能。
5.正規(guī)化數(shù)據(jù)表
正規(guī)化是減少數(shù)據(jù)冗余和維護(hù)數(shù)據(jù)完整性的過程。在設(shè)計(jì)數(shù)據(jù)庫表結(jié)構(gòu)時,應(yīng)該遵循正規(guī)化的規(guī)則。
正規(guī)化的目標(biāo)是將數(shù)據(jù)劃分為多個相互關(guān)聯(lián)的表,每個表僅包含其實(shí)體的唯一信息。不同的表之間使用主鍵和外鍵進(jìn)行關(guān)聯(lián)。
在進(jìn)行正規(guī)化時,應(yīng)該遵循以下原則:
– 消除重復(fù)的數(shù)據(jù);
– 將表拆分成相對較小的表;
– 最小化對重復(fù)數(shù)據(jù)的更新操作;
– 確保每個表只包含唯一數(shù)據(jù)。
6.使用存儲過程和觸發(fā)器
存儲過程和觸發(fā)器旨在為數(shù)據(jù)庫提供額外的安全性和功能。存儲過程是一組SQL語句的,可以在需要時進(jìn)行查詢。觸發(fā)器是與表相關(guān)聯(lián)的一些邏輯,只要表中的一些操作發(fā)生,就會自動啟動。
使用存儲過程和觸發(fā)器可以提高數(shù)據(jù)庫的性能和可維護(hù)性。
7.備份和恢復(fù)
備份和恢復(fù)是數(shù)據(jù)庫設(shè)計(jì)中最重要的部分之一。備份和恢復(fù)可以在數(shù)據(jù)庫出現(xiàn)故障時幫助恢復(fù)數(shù)據(jù)庫。
使用備份和恢復(fù)時,應(yīng)該考慮以下因素:
– 應(yīng)該定期備份數(shù)據(jù)庫,以確保在系統(tǒng)故障時能夠快速進(jìn)行恢復(fù);
– 應(yīng)該進(jìn)行備份測試,以確保備份是可用的;
– 應(yīng)該在服務(wù)器上多個位置存儲備份,以確保不會丟失所有備份;
– 應(yīng)該測試恢復(fù)過程,以確保在需要時可以正確恢復(fù)數(shù)據(jù)庫。
結(jié)論
數(shù)據(jù)庫設(shè)計(jì)是企業(yè)基礎(chǔ)設(shè)施的重要組成部分。設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)可以提高數(shù)據(jù)庫的可靠性和性能。本文提供了一些數(shù)據(jù)庫設(shè)計(jì)建議和技巧,幫助讀者設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)。通過遵循這些建議和技巧,可以設(shè)計(jì)出可維護(hù)且高效的數(shù)據(jù)庫表結(jié)構(gòu)。
相關(guān)問題拓展閱讀:
- 數(shù)據(jù)庫設(shè)計(jì)的六個階段是什么?
- 數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì),常見的數(shù)據(jù)庫管理系統(tǒng)
數(shù)據(jù)庫設(shè)計(jì)的六個階段是什么?
數(shù)據(jù)庫設(shè)計(jì)過程分為以下六個階段:
1、需求分析階段
準(zhǔn)確理解和分析用戶需求(包括數(shù)據(jù)和處理),它是整個設(shè)計(jì)過程的基礎(chǔ),也是最困難、最耗時的一步。
2、概念結(jié)構(gòu)設(shè)計(jì)階段
是整個數(shù)據(jù)庫設(shè)計(jì)的關(guān)鍵,通過對用戶需求的集成、歸納和抽象,形成了一個獨(dú)立于特定數(shù)據(jù)庫管理系統(tǒng)的概念模型。
3、邏輯結(jié)構(gòu)設(shè)計(jì)階段
將概念結(jié)構(gòu)轉(zhuǎn)換為DBMS支持的數(shù)據(jù)模型,對其進(jìn)行優(yōu)化。
4、數(shù)據(jù)庫物理設(shè)計(jì)階段
為邏輯數(shù)據(jù)模型選擇最適合應(yīng)用程序環(huán)境的物理結(jié)構(gòu)(包括存儲結(jié)構(gòu)和存取方法)。
5、數(shù)據(jù)庫實(shí)現(xiàn)階段
根據(jù)邏輯設(shè)計(jì)和物理設(shè)計(jì)的結(jié)果,使用數(shù)據(jù)庫管理系統(tǒng)提供的數(shù)據(jù)語言、工具和主機(jī)語言,建立數(shù)據(jù)庫,編寫調(diào)試應(yīng)用程序,組織數(shù)據(jù)倉庫,并進(jìn)行試運(yùn)行。
6、數(shù)據(jù)庫運(yùn)行維護(hù)階段
數(shù)據(jù)庫應(yīng)用系統(tǒng)經(jīng)試運(yùn)行后可投入正式運(yùn)行,在數(shù)據(jù)庫系統(tǒng)運(yùn)行過程中,需要不斷地對其進(jìn)行評估、調(diào)整和修改。
注:在設(shè)計(jì)過程中,將數(shù)據(jù)庫的設(shè)計(jì)與數(shù)據(jù)庫中數(shù)據(jù)處理的設(shè)計(jì)緊密結(jié)合起來,在每個階段同時對這兩個方面的要求進(jìn)行分析、抽象、設(shè)計(jì)和實(shí)現(xiàn),相互借鑒和補(bǔ)充,從而完善這兩個方面的設(shè)計(jì)。
擴(kuò)展資料:
數(shù)據(jù)庫設(shè)計(jì)技術(shù)
1、清晰的用戶需求:作為計(jì)算機(jī)軟件開發(fā)的重要基礎(chǔ),數(shù)據(jù)庫設(shè)計(jì)直接反映了用戶的需求。數(shù)據(jù)庫必須與用戶緊密溝通,緊密結(jié)合用戶需求。在定義了用戶開發(fā)需求之后,設(shè)計(jì)人員還需要反映具體的業(yè)務(wù)關(guān)系和流程。
2、注意數(shù)據(jù)維護(hù):設(shè)計(jì)面積過大、數(shù)絕遲御據(jù)過于復(fù)雜是數(shù)據(jù)庫設(shè)計(jì)中常見的問題,設(shè)計(jì)人員應(yīng)注意數(shù)據(jù)維護(hù)。旦碰
3、增加命名規(guī)范化:命名數(shù)據(jù)庫程序和文件非常重要,不僅要避免重復(fù)的名稱,還要確保數(shù)據(jù)處于平衡狀態(tài)。為了降低檢索信息和資源的復(fù)雜度和難度,設(shè)計(jì)人員應(yīng)了解數(shù)據(jù)庫程序與文件之并巖間的關(guān)系,并靈活使用大小寫字母命名。
4、充分考慮數(shù)據(jù)庫的優(yōu)化和效率:考慮到數(shù)據(jù)庫的優(yōu)化和效率,設(shè)計(jì)人員需要對不同表的存儲數(shù)據(jù)采用不同的設(shè)計(jì)方法。在設(shè)計(jì)中,還應(yīng)該使用最少的表和最弱的關(guān)系來實(shí)現(xiàn)海量數(shù)據(jù)的存儲。
5、不斷調(diào)整數(shù)據(jù)之間的關(guān)系:不斷調(diào)整和簡化數(shù)據(jù)之間的關(guān)系,可以有效減少設(shè)計(jì)與數(shù)據(jù)之間的聯(lián)系,進(jìn)而為維護(hù)數(shù)據(jù)之間的平衡和提高數(shù)據(jù)讀取效率提供保障。
6、合理使用索引:數(shù)據(jù)庫索引通常分為聚集索引和非聚集索引,這樣可以提高數(shù)據(jù)搜索的效率。
參考資料來源:
百度百科-數(shù)據(jù)庫設(shè)計(jì)
按照規(guī)轎中虛范設(shè)計(jì),我們將數(shù)據(jù)庫的設(shè)計(jì)過程分為六個階段培拆:
系統(tǒng)需求分析階段;
概念結(jié)構(gòu)設(shè)計(jì)階段;
邏輯結(jié)構(gòu)設(shè)計(jì)階段;
物理結(jié)構(gòu)設(shè)計(jì)階段;閉燃
數(shù)據(jù)庫實(shí)施階段;
數(shù)據(jù)庫運(yùn)行與維護(hù)階段;
數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì),常見的數(shù)據(jù)庫管理系統(tǒng)
一、數(shù)據(jù)場景 1、表結(jié)構(gòu)簡介 任何工具類的東西都是為了解決某個場景下的問題,比如Redis緩存系統(tǒng)熱點(diǎn)數(shù)據(jù),ClickHouse解決海量數(shù)據(jù)的實(shí)時分析,MySQL關(guān)系型數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)。數(shù)據(jù)的存儲則需要設(shè)計(jì)對應(yīng)的表結(jié)構(gòu),清楚的表結(jié)構(gòu),有助于快速開發(fā)業(yè)務(wù),和理解系統(tǒng)。表結(jié)構(gòu)的設(shè)計(jì)通常從下面幾個方面考慮:業(yè)務(wù)場景、設(shè)計(jì)規(guī)范、表結(jié)構(gòu)、字段屬性、數(shù)據(jù)管理。
2、用戶場景
例如存儲用戶基礎(chǔ)信息數(shù)據(jù),通常都會下面幾個相關(guān)表結(jié)構(gòu):用戶信息表、單點(diǎn)登錄表、狀態(tài)管理表、支付賬戶表等。
用戶信息表
存儲用戶三要素相關(guān)信息:姓名,手機(jī)號,身份證,登錄密碼,郵箱等。
CREATE TABLE `ms_user_center` ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘用戶ID’, `user_name` varchar(20) NOT NULL COMMENT ‘用戶名’, `real_name` varchar(20) DEFAULT NULL COMMENT ‘真實(shí)姓名’, `pass_word` varchar(32) NOT NULL COMMENT ‘密碼’, `phone` varchar(20) NOT NULL COMMENT ‘手機(jī)號’, `email` varchar(32) DEFAULT NULL COMMENT ‘郵箱’, `head_url` varchar(100) DEFAULT NULL COMMENT ‘用戶頭像URL’, `card_id` varchar(32) DEFAULT NULL COMMENT ‘身份證號’, `user_sex` int(1) DEFAULT ‘1’ COMMENT ‘用戶性別:0-女,1-男’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶表’; 單點(diǎn)登錄表
用意是在多個業(yè)務(wù)系統(tǒng)中,用戶登錄一次就可以訪問所有相互信任的業(yè)務(wù)子系統(tǒng),是聚合業(yè)務(wù)平臺常用的解決方案。
CREATE TABLE `ms_user_sso` ( `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `sso_id` varchar(32) NOT NULL COMMENT ‘單點(diǎn)信息編號ID’, `sso_code` varchar(32) NOT NULL COMMENT ‘單點(diǎn)登錄碼,唯一核心標(biāo)識’, `log_ip` varchar(32) DEFAULT NULL COMMENT ‘登錄IP地址’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶單點(diǎn)登錄表’; 狀態(tài)管理表
系統(tǒng)用戶在使用時候可能出現(xiàn)多個狀態(tài),例如賬戶凍結(jié)、密碼鎖定等,把狀態(tài)聚合到一起,可以更加方便的管理和驗(yàn)證。
CREATE TABLE `ms_user_status` ( `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `account_status` int(1) DEFAULT ‘1’ COMMENT ‘賬戶狀態(tài):0-凍結(jié),1-未凍結(jié)’, `real_name_status` int(1) DEFAULT ‘0’ COMMENT ‘實(shí)名認(rèn)證狀態(tài):0-未實(shí)名,1-已實(shí)名’, `pay_pass_status` int(1) DEFAULT ‘0’ COMMENT ‘支付密碼是否設(shè)置:0-未設(shè)置,1-設(shè)置’, `wallet_pass_status` int(1) DEFAULT ‘0’ COMMENT ‘錢包密碼是否設(shè)置:0-未設(shè)置,1-設(shè)置’, `wallet_status` int(1) DEFAULT ‘1’ COMMENT ‘錢包是否凍結(jié):0-凍結(jié),1-未凍結(jié)’, `email_status` int(1) DEFAULT ‘0’ COMMENT ‘郵箱狀態(tài):0-未激活,1-激活’, `message_status` int(1) DEFAULT ‘1’ COMMENT ‘短信提醒開啟:0-未開啟,1-開啟’, `letter_status` int(1) DEFAULT ‘1’ COMMENT ‘站內(nèi)信提醒開啟:0-未開啟,1-開啟’, `emailmsg_status` int(1) DEFAULT ‘0’ COMMENT ‘郵件提醒開啟:0-未開啟,1-開啟’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`user_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶狀態(tài)表’; 支付賬戶表
用戶交易的核心表,存儲用戶相關(guān)的賬戶資金信息。
CREATE TABLE `ms_user_wallet` ( `wallet_id` int(11) NOT NULL AUTO_INCREMENT COMMENT ‘錢包ID’, `user_id` int(11) NOT NULL COMMENT ‘用戶ID’, `wallet_pwd` varchar(32) DEFAULT NULL COMMENT ‘錢包密碼’, `total_account` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘賬戶總額’, `usable_money` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘可用余額’, `freeze_money` decimal(20,2) DEFAULT ‘0.00’ COMMENT ‘凍結(jié)金額’, `freeze_time` datetime DEFAULT NULL COMMENT ‘凍結(jié)時間’, `thaw_time` datetime DEFAULT NULL COMMENT ‘解凍時間’, `create_time` datetime DEFAULT NULL COMMENT ‘創(chuàng)建時間’, `update_time` datetime DEFAULT NULL COMMENT ‘更新時間’, `state` int(1) DEFAULT ‘1’ COMMENT ‘是否可用,0-不可用,1-可用’, PRIMARY KEY (`wallet_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT=’用戶錢包’; 二、設(shè)計(jì)規(guī)范 1、涉及模塊
通過上面幾個表設(shè)計(jì)的案例,可以看到表設(shè)計(jì)關(guān)聯(lián)到數(shù)據(jù)庫的各個方面知識:數(shù)據(jù)類型,索引,編碼,存儲引擎等。表設(shè)計(jì)是一個很大的命題,不過也遵循一個基本規(guī)范:三范式。
2、三范式 基礎(chǔ)概念
一范式
表的列的具有原子性,不可再分解,即列的信息,不能分解,關(guān)系型數(shù)據(jù)庫MySQL、Oracle等自動的滿足。
二范式
每個事實(shí)的數(shù)據(jù)記錄只會出現(xiàn)一次, 不會冗余, 通常設(shè)計(jì)一個主鍵來實(shí)現(xiàn)。
三范式
要求一個表中不包含已經(jīng)存在于其它表的非主鍵信息,例如部門和員工的信息,員工表包含部門表的主鍵ID,則可以關(guān)聯(lián)獲取相關(guān)信息,沒必要在員工表保存相關(guān)信息。
優(yōu)缺點(diǎn)對比
范式化設(shè)計(jì)
范式化結(jié)構(gòu)設(shè)計(jì)通常更新快,因?yàn)槿哂鄶?shù)據(jù)較少,表結(jié)構(gòu)輕巧,也更好的寫入內(nèi)存中。但是查詢起來涉及到關(guān)聯(lián),代價非常高,非常損耗查詢性能。
反范式化設(shè)計(jì)
所有的數(shù)據(jù)都在一張表中,避免關(guān)聯(lián)查詢,索引的有效性更高,但是數(shù)據(jù)的冗余性極高。
建議結(jié)論
上述的兩種設(shè)計(jì)方式在實(shí)際開發(fā)中都是不存在的,在實(shí)際開發(fā)中都是混合使用。比如匯總統(tǒng)計(jì),緩存數(shù)據(jù),都會基于反范式化的設(shè)計(jì)。
三、字段屬性
合適的字段類型對于高性能來說非常重要,基本原則如下:簡單的類型占用資源更少;在可以正確存儲數(shù)據(jù)的情況下,選最小的數(shù)據(jù)類型。
1、數(shù)據(jù)類型選擇 整數(shù)類型
TINYINT、ALLINT、MEDIUMINT、INT、BIGINT,根據(jù)數(shù)據(jù)類型范圍合理選擇即可。
實(shí)數(shù)類型
FLOAT、DOUBLE、DECIMAL,建議資金貨幣相關(guān)類型使用高精度DECIMAL存儲,或者把數(shù)據(jù)成倍擴(kuò)大為整數(shù),采用BIGINT存儲,不過處理相對麻煩。
字符類型
CHAR、VARCHAR,長度不確定建議采用VARCHAR存儲,不過VARCHAR類型需要額外開銷記錄字符串長度。CHAR適合存儲短字符,或者定長字符串,例如MD5的加密結(jié)構(gòu)。
時間類型
DATETIME、TIMESTAMP,DATETIME保存大范圍的值,精度秒。TIMESTAMP以時間戳的格式,范圍相對較小,效率也相對較高,所以通常情況建議使用。
MySQL的字段類型有很多種,可以根據(jù)數(shù)據(jù)特性選擇合適的,這里只描述常見的幾種類型。
2、基礎(chǔ)用法操作 數(shù)據(jù)類型
修改字段類型
ALTER TABLE ms_user_sso MODIFY state CHAR(1) DEFAULT ‘0’ ; ALTER TABLE ms_user_sso MODIFY state INT(1) DEFAULT ‘1’ COMMENT ‘狀態(tài):0不可用,1可用’;
修改名稱位置
ALTER TABLE ms_user_sso CHANGE log_ip login_ip VARCHAR(32) AFTER update_time ; 索引使用
索引類型:主鍵索引,普通索引,唯一索引,組合索引,全文索引。這里演示普通索引的操作。MySQL的核心模塊,后續(xù)詳說。
添加索引
ALTER TABLE ms_user_wallet ADD INDEX user_id_index(user_id) ; CREATE INDEX state_index ON ms_user_wallet(state) ;
查看索引
SHOW INDEX FROM ms_user_wallet;
刪除索引
DROP INDEX state_index ON ms_user_wallet ;
修改索引
不具有真正意義上的修改,可以把原有的索引刪除之后,再次添加索引。
外鍵關(guān)聯(lián)
用處:外鍵關(guān)聯(lián)的作用保證多個數(shù)據(jù)表的數(shù)據(jù)一致性和完整性,建表時先有主表,后有從表;刪除數(shù)據(jù)表,需要先刪從表,再刪主表。復(fù)雜場景不建議使用,實(shí)際開發(fā)中用的也不多。
添加外鍵
ALTER TABLE ms_user_wallet ADD CONSTRAINT user_id_out_key FOREIGN KEY(user_id) REFERENCES ms_user_center(id) ;
刪除外鍵
ALTER TABLE ms_user_wallet DROP FOREIGN KEY user_id_out_key ; 四、表結(jié)構(gòu)管理 1、查看結(jié)構(gòu) DESC ms_user_status ; SHOW CREATE TABLE ms_user_status ; 2、字段結(jié)構(gòu) 添加字段 ALTER TABLE ms_user_status ADD `delete_time` datetime DEFAULT NULL COMMENT ‘刪除時間’ ; 刪除字段 ALTER TABLE ms_user_status DROP COLUMN delete_time ; 3、修改表名 ALTER TABLE ms_user_center RENAME ms_user_info ; 4、存儲引擎 存儲引擎 SELECT VERSION() ; SHOW ENGINES ;
MySQL 5.6 支持的存儲引擎有InnoDB、MyISAM、Memory、Archive、CSV、BLACKHOLE等。一般默認(rèn)使用InnoDB,支持事務(wù)管理。該模塊MySQL核心,后續(xù)詳解。
修改引擎
數(shù)據(jù)量大的場景下,存儲引擎修改是一個難度極大的操作,容易會導(dǎo)致表的特性變動,引起各種后續(xù)反應(yīng),后續(xù)會詳說。
ALTER TABLE ms_user_sso ENGINE = MyISAM ; 5、修改編碼
表字符集默認(rèn)使用utf8,通用,無亂碼風(fēng)險,漢字3字節(jié),英文1字節(jié),utf8mb4是utf8的超集,有存儲4字節(jié)例如表情符號時使用。
查看編碼 SHOW VARIABLES LIKE ‘character%’; 修改編碼 ALTER TABLE ms_user_sso DEFAULT CHARACTER SET utf8mb4; 五、數(shù)據(jù)管理 1、增刪改查
添加數(shù)據(jù)
INSERT INTO ms_user_sso ( user_id,sso_id,sso_code,create_time,update_time,login_ip,state ) VALUES ( ‘1’,’SSO’,’SSO’, ‘:56:57′,’:57:01′,’127.0.0.1′,’1′ );
更新數(shù)據(jù)
UPDATE ms_user_sso SET user_id = ‘1’,sso_id = ‘SSO’,sso_code = ‘SSO’, create_time = ‘:56:57’,update_time = ‘:57:01’, login_ip = ‘127.0.0.1’,state = ‘1’ WHERE user_id = ‘1’;
查詢數(shù)據(jù)
一般情況下都是禁止使用 select* 操作。
SELECT user_id,sso_id,sso_code,create_time,update_time,login_ip,state FROM ms_user_sso WHERE user_id = ‘1’;
刪除數(shù)據(jù)
DELETE FROM ms_user_sso WHERE user_id = ‘2’ ;
不帶where條件,就是刪除全部數(shù)據(jù)。原則上不允許該操作,優(yōu)化篇會詳解。TRUNCATE TABLE也是清空表數(shù)據(jù),但是占用的資源相對較少。
2、數(shù)據(jù)安全 不可逆加密
這類加密算法,多用來做數(shù)據(jù)驗(yàn)證操作,比如常見的密碼驗(yàn)證。
SELECT MD5(‘cicada’)=’94454b1241ad2cfbd0c44efda1b6b6ba’ ; SELECT SHA(‘cicada’)=’a2e4fd34e1d14015fc4dedc7d’; SELECT PASSWORD(‘ile’)=’*B4FB95D86DCFC3F33ADC742CD’ ; 可逆加密
安全性要求高的系統(tǒng),需要做三級等保,對數(shù)據(jù)的安全性極高,數(shù)據(jù)在存儲時必須加密入庫,取出時候需要解密,這些就需要可逆加密。
SELECT DECODE(ENCODE(‘123456′,’key_salt’),’key_salt’) ; SELECT AES_DECRYPT(AES_ENCRYPT(‘cicada’,’salt123′),’salt123′);
上述數(shù)據(jù)安全的管理,也可以基于應(yīng)用系統(tǒng)的服務(wù)(代碼)層進(jìn)行處理,相對專業(yè)的流程是從數(shù)據(jù)生成源頭處理,規(guī)避數(shù)據(jù)傳遞過程泄露,造成不必要的風(fēng)險。
回復(fù)數(shù)據(jù)庫表數(shù)據(jù)庫設(shè)計(jì)的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于回復(fù)數(shù)據(jù)庫表數(shù)據(jù)庫設(shè)計(jì),如何設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)? 數(shù)據(jù)庫設(shè)計(jì)建議和技巧,數(shù)據(jù)庫設(shè)計(jì)的六個階段是什么?,數(shù)據(jù)庫表結(jié)構(gòu)設(shè)計(jì),常見的數(shù)據(jù)庫管理系統(tǒng)的信息別忘了在本站進(jìn)行查找喔。
成都服務(wù)器托管選創(chuàng)新互聯(lián),先上架開通再付費(fèi)。
創(chuàng)新互聯(lián)(www.cdcxhl.com)專業(yè)-網(wǎng)站建設(shè),軟件開發(fā)老牌服務(wù)商!微信小程序開發(fā),APP開發(fā),網(wǎng)站制作,網(wǎng)站營銷推廣服務(wù)眾多企業(yè)。電話:028-86922220
文章題目:如何設(shè)計(jì)高效的數(shù)據(jù)庫表結(jié)構(gòu)? 數(shù)據(jù)庫設(shè)計(jì)建議和技巧 (回復(fù)數(shù)據(jù)庫表數(shù)據(jù)庫設(shè)計(jì))
網(wǎng)頁URL:http://m.5511xx.com/article/dhhddjp.html


咨詢
建站咨詢
