国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

數(shù)據(jù)庫(kù)字段設(shè)計(jì)

這篇具有很好參考價(jià)值的文章主要介紹了數(shù)據(jù)庫(kù)字段設(shè)計(jì)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

1.為什么要設(shè)置主鍵?
答:在一張表中,可以確定一條唯一記錄的屬性集(這個(gè)屬性集中的元素可能有一個(gè),兩個(gè),三個(gè)甚至更多)稱為超鍵;如果屬性集中只有一個(gè)元素,則通過這個(gè)屬性集就可以確認(rèn)一條唯一的記錄,這樣的屬性集稱為候選鍵;從候選鍵中選擇某一個(gè)屬性集即可作為主鍵。由上述內(nèi)容可知超鍵、候選鍵、主鍵集合包含關(guān)系為:超鍵>候選鍵>主鍵。
但是一張表中可以有主鍵、也可以沒有;但如果是表結(jié)構(gòu)比較復(fù)雜、數(shù)據(jù)量龐大的表,則建議設(shè)置主鍵,否則會(huì)眼中影響CRUD操作的效率,因?yàn)闆]有安全的方法保證值涉及到相關(guān)的行。

2.聚集索引是怎么確定的?
答:如果設(shè)置了主鍵,則InnoDB會(huì)選擇主鍵作為聚集索引,如果不設(shè)主鍵,則會(huì)選擇第一個(gè)NOT NULL的唯一索引作為聚集索引,如果以上兩個(gè)條件都不滿足,則會(huì)選擇長(zhǎng)度為6個(gè)字節(jié)的ROWID作為聚集索引。

3.鍵是用自增還是UUID?
答:首先,InnoDB使用聚集索引,所有的數(shù)據(jù)存儲(chǔ)在主索引的葉子節(jié)點(diǎn)上,這就要求同一葉子節(jié)點(diǎn)(大小為一個(gè)磁盤頁或者內(nèi)存頁)內(nèi)的各條記錄需要按照主鍵順序來存放,因此每當(dāng)有一條數(shù)據(jù)添加進(jìn)數(shù)據(jù)庫(kù)時(shí),MySQL需要根據(jù)其主鍵大小為其查找適當(dāng)?shù)奈恢脕泶娣?,如果頁面達(dá)到裝載因子(15/16),則會(huì)開辟一個(gè)新的節(jié)點(diǎn)來存放。
因此,如果使用自增長(zhǎng)主鍵,那么每次插入新紀(jì)錄時(shí),則只需要把這條記錄添加到當(dāng)前索引節(jié)點(diǎn)的后續(xù)位置;但如果使用UUID作為主鍵,則每次插入新的記錄時(shí),首先需要根據(jù)主鍵的大小在主索引的所有葉子節(jié)點(diǎn)內(nèi)查找合適的位置,然后移動(dòng)查找到的位置之后的記錄,這就造成了移動(dòng)記錄的開銷和空間碎片,后續(xù)需要通過optimize table來優(yōu)化。
所以在使用InnoDB存儲(chǔ)引擎時(shí),如果沒有特別的需要,建議使用與業(yè)務(wù)無關(guān)的自增字段作為主鍵。

4.主鍵為什么不推薦有業(yè)務(wù)含義?
答:歸根結(jié)底,具有業(yè)務(wù)含義的主鍵可能發(fā)生改變,如果發(fā)生改變,則需要根據(jù)主鍵的值在主索引的葉子節(jié)點(diǎn)內(nèi)重新排序,這就可能造成行數(shù)據(jù)的大規(guī)模移動(dòng),帶來很大的時(shí)間開銷,同時(shí),這種變化會(huì)帶來頁分裂,但是在頁分裂的時(shí)候,InnoDB會(huì)在B+索引樹上加鎖,從而導(dǎo)致鎖搶用的現(xiàn)象。
頁分裂:頁分裂發(fā)生在insert(主鍵不遞增)或update操作下,通常來說,B+索引樹的葉子節(jié)點(diǎn)的大小為一個(gè)內(nèi)存頁或者磁盤頁,當(dāng)進(jìn)行上述操作時(shí),會(huì)造成當(dāng)前頁的數(shù)據(jù)大小超出頁大小,這就會(huì)造成需要?jiǎng)?chuàng)建一頁新頁來存放數(shù)據(jù),而這個(gè)新頁則需要根據(jù)頁順序進(jìn)行排列,這就造成:假如原先的頁順序是10-11-12,對(duì)11頁進(jìn)行insert或update操作,數(shù)據(jù)大小超出頁大小,則需要新增一頁來保存,按理來說,新增的一頁頁號(hào)應(yīng)該為12,但是12頁已經(jīng)存在,假設(shè)14頁不存在,創(chuàng)建新頁14,調(diào)整鏈表的前后指針,形成10-11-14-12的頁順序,這樣在物理存儲(chǔ)上頁是混亂的,并且這個(gè)頁很大概率在不同的區(qū)。要調(diào)整這種混亂的頁順序,可以使用optimize table來理順表,另一種就是頁合并。
頁合并:當(dāng)我們?cè)跀?shù)據(jù)庫(kù)中刪除一行記錄時(shí),并不會(huì)立即刪除,而是現(xiàn)在要?jiǎng)h除的行設(shè)置一個(gè)標(biāo)記位,代表該行記錄可被覆蓋,當(dāng)頁中被標(biāo)記的記錄數(shù)量達(dá)到頁大小的50%,則該頁就會(huì)在其相鄰頁尋找是否可以將兩頁合并以優(yōu)化空間,同時(shí)對(duì)記錄更新也可能出現(xiàn)這種情況。

5.貨幣字段存儲(chǔ)用什么類型?
答:貨幣類型推薦使用decimal來存儲(chǔ),因?yàn)槭褂胐ouble和float存儲(chǔ),當(dāng)數(shù)值比較大的時(shí)候,可能存在微小的誤差。

6.時(shí)間字段用什么類型?
答:timestamp(占4個(gè)字節(jié),該字段能存儲(chǔ)的范圍是:1970-01-01 08:00:01至2038-01-19 11:14:07,但是其優(yōu)點(diǎn)是:該字段保存的時(shí)間帶有時(shí)區(qū),一旦系統(tǒng)的時(shí)區(qū)發(fā)生改變,該字段的值就會(huì)自動(dòng)更新,適合用來做跨時(shí)區(qū)的應(yīng)用)
datetime(占8個(gè)字節(jié),該字段的存儲(chǔ)范圍是:1000-01-01 00:00:00至9999-12-31 23:59:59,其缺點(diǎn)是時(shí)間是絕對(duì)的,不會(huì)隨著系統(tǒng)時(shí)區(qū)更新)
bigInt(占8個(gè)字節(jié),存放時(shí)間戳,缺點(diǎn)就是時(shí)間展示不直觀)

7.為什么不在數(shù)據(jù)庫(kù)中存儲(chǔ)文件,視頻,圖片等?
答:數(shù)據(jù)庫(kù)中可以使用text,blob來存儲(chǔ)大文件,但我們通常來說都把文件、視頻存在在文件系統(tǒng)中,而在數(shù)據(jù)庫(kù)中存放存儲(chǔ)路徑,其主要原因是:
(1)MySQL內(nèi)存臨時(shí)表不支持text、blob等類型,處理時(shí)會(huì)非常緩慢。
(2)數(shù)據(jù)庫(kù)大,內(nèi)存占用比較高,維護(hù)麻煩。
(3)binlog太大,如果是主從同步,會(huì)導(dǎo)致主從同步效率問題。

8.如果一張表中如大字段,且該字段不會(huì)頻繁更新,以讀為主,是拆成子表還是存放在一起?
答:如果拆成子表,則會(huì)帶來連表查詢消耗,如果存放在一起,則會(huì)帶來查詢性能,所以視情況而定,但如果數(shù)據(jù)量特別大,建議拆成子表。文章來源地址http://www.zghlxwxcb.cn/news/detail-791550.html

到了這里,關(guān)于數(shù)據(jù)庫(kù)字段設(shè)計(jì)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Oracle數(shù)據(jù)庫(kù)在指定字段后新增字段

    記錄一下數(shù)據(jù)庫(kù)中為表增加字段,且在指定字段后新增; mysql數(shù)據(jù)庫(kù)的話比較簡(jiǎn)單通過一下sql語句即可實(shí)現(xiàn): 而Oracle數(shù)據(jù)庫(kù)不支持上述語法,添加字段只能顯示到最后一位,所以如果非要添加字段到指定字段后的話可以通過新建數(shù)據(jù)表并修改表明實(shí)現(xiàn),如下面語句所示:

    2024年02月15日
    瀏覽(21)
  • django添加數(shù)據(jù)庫(kù)字段進(jìn)行數(shù)據(jù)遷移

    django添加數(shù)據(jù)庫(kù)字段進(jìn)行數(shù)據(jù)遷移

    1.修改view.py里面的變量 2.在model.py新增字段 3.打開terminal并將環(huán)境切到項(xiàng)目所在環(huán)境,切換方式為 4.執(zhí)行命令

    2024年02月09日
    瀏覽(28)
  • 關(guān)于數(shù)據(jù)庫(kù)json 字段的查詢

    1、查詢json字符串中是否包含某個(gè)節(jié)點(diǎn) 2、查詢json字符串中某個(gè)節(jié)點(diǎn)等于或者不等于某個(gè)值 需要注意的點(diǎn)json串和json數(shù)組匹配方式不同 json數(shù)組匹配? $[*].name? 或者?$[0].name json串 $.name 這里發(fā)現(xiàn)一個(gè)總結(jié)的很好的博主,推薦一下 mysql中json_extract的使用方法_-王尚可-的博客-CSDN博

    2024年02月16日
    瀏覽(23)
  • Mysql中的對(duì)數(shù)據(jù)庫(kù)字段的數(shù)據(jù)進(jìn)行加密

    Mysql中的對(duì)數(shù)據(jù)庫(kù)字段的數(shù)據(jù)進(jìn)行加密

    注意點(diǎn):此處只對(duì)name字段進(jìn)行了字段類型的修改。 ENCODE(\\\'123\\\',\\\'123\\\'): 第一個(gè)123:表示插入數(shù)據(jù)庫(kù)中的數(shù)據(jù)(即將要被轉(zhuǎn)換的數(shù)據(jù)) 第二個(gè)123:表示轉(zhuǎn)換秘鑰,可以任意起名。在解密的時(shí)候會(huì)需要用到。 結(jié)果: 注意點(diǎn)1 :此處DECODE的兩個(gè)參數(shù)分別為 需要解密的內(nèi)容(數(shù)據(jù)庫(kù)中

    2024年02月09日
    瀏覽(19)
  • MyBatis Plus 數(shù)據(jù)庫(kù)字段加密處理

    當(dāng)項(xiàng)目開發(fā)到一半,可能突然客戶會(huì)要求對(duì)數(shù)據(jù)庫(kù)里面比如手機(jī)號(hào)、身份證號(hào)的字段進(jìn)行加密; 在保證開發(fā)最快、影響范圍最小的情況下,我們需要選擇一種介于數(shù)據(jù)庫(kù)和代碼之間的工具來幫我們實(shí)現(xiàn)自動(dòng)加解密; 這里我們選用AES對(duì)稱加密算法,因?yàn)樗强赡嫠惴ā?AES加密

    2024年02月07日
    瀏覽(26)
  • mysql 查詢數(shù)據(jù)庫(kù)所有表,表字段

    mysql 查詢數(shù)據(jù)庫(kù)所有表,表字段

    工作中,編寫xmlsql時(shí)需要查詢?nèi)孔侄?,可以利用sql快速組裝所有的列 1.查詢所有的表名 2.查詢某個(gè)表的所有字段 3.組裝表的所有列

    2024年02月12日
    瀏覽(23)
  • SQLServer數(shù)據(jù)庫(kù)給某個(gè)字段添加自增

    SQLServer數(shù)據(jù)庫(kù)給某個(gè)字段添加自增

    1、啟動(dòng)Microsoft SQL Server Management Studio 18工具 Navicat好像不能設(shè)置字段的自增…,所以用了Management Studio 18 2、工具 選項(xiàng) 設(shè)計(jì)器 3、修改這個(gè)字段為自增,并保存! 4、測(cè)試,發(fā)現(xiàn)此字段自增成功!

    2024年02月15日
    瀏覽(30)
  • 【如何獲取數(shù)據(jù)庫(kù)表的字段并拼接】

    在寫sql語句時(shí),我要獲取到該表的大部門字段來做處理,一個(gè)個(gè)粘貼復(fù)制太費(fèi)事了,所以我決定執(zhí)行sql語句把表中字段查詢出來 其中 test 是表名, school 是數(shù)據(jù)庫(kù)名字,這樣能把該數(shù)據(jù)庫(kù)中某表的所有字段查詢出來 因?yàn)槲乙霾樵儯枰禾?hào)拼接,所以,對(duì)sql語句進(jìn)行了修改

    2024年02月10日
    瀏覽(18)
  • PostgreSQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)表字段的自增

    PostgreSQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)表字段的自增

    在使用MySQL的時(shí)候,創(chuàng)建表結(jié)構(gòu)時(shí)可以通過 AUTO_INCREMENT 來指定主鍵是否自增。在PostgreSQL數(shù)據(jù)庫(kù)中,使用序列來實(shí)現(xiàn)字段的自增。 PostgreSQL序列是一種特殊的用于生產(chǎn)整數(shù)序列數(shù)據(jù)庫(kù)對(duì)象。序列通常用于主鍵列,與mysql的AUTO_INCREMENT 概念類似。 PostgreSQL 提供三種序列偽類

    2024年02月04日
    瀏覽(20)
  • Android Studio 使用SQLite數(shù)據(jù)庫(kù)來創(chuàng)建數(shù)據(jù)庫(kù)+創(chuàng)建數(shù)據(jù)庫(kù)表+更新表再次往表添加字段

    Android Studio 使用SQLite數(shù)據(jù)庫(kù)來創(chuàng)建數(shù)據(jù)庫(kù)+創(chuàng)建數(shù)據(jù)庫(kù)表+更新表再次往表添加字段

    目錄 一.前言 二.SQLite數(shù)據(jù)庫(kù)介紹 1.什么是SQLite數(shù)據(jù)庫(kù) 2.特點(diǎn) 3.SQLite 操作API 4.SQLite數(shù)據(jù)類型 三.SQlite數(shù)據(jù)庫(kù)的使用 1.創(chuàng)建類繼承SQLiteOPenHelper 2.創(chuàng)建數(shù)據(jù)庫(kù) 3.創(chuàng)建數(shù)據(jù)庫(kù)表 4.更新表添加字段 完整代碼 擴(kuò)展 總結(jié) 我們?cè)谑褂肁ndroid進(jìn)行開發(fā)的時(shí)候不可避免的要使用到數(shù)據(jù),那么就需

    2024年02月08日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包