全國(guó)站 [切換城市]
眾眾網(wǎng)全國(guó)頁(yè) 數(shù)據(jù)庫(kù)中的范式和反范式區(qū)別詳解

數(shù)據(jù)庫(kù)中的范式和反范式區(qū)別詳解

來(lái)源:網(wǎng)友投稿 時(shí)間:2020-03-20

范式是關(guān)系數(shù)據(jù)庫(kù)理論的基礎(chǔ),也是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)過(guò)程中所要遵循的規(guī)則和指導(dǎo)方法。數(shù)據(jù)庫(kù)的設(shè)計(jì)范式是數(shù)據(jù)庫(kù)設(shè)計(jì)所需要滿足的規(guī)范。只有理解數(shù)據(jù)庫(kù)的設(shè)計(jì)范式,才能設(shè)計(jì)出高效率、優(yōu)雅的數(shù)據(jù)庫(kù),否則可能會(huì)設(shè)計(jì)出錯(cuò)誤的數(shù)據(jù)庫(kù)。

  范式是關(guān)系數(shù)據(jù)庫(kù)理論的基礎(chǔ),也是我們?cè)谠O(shè)計(jì)數(shù)據(jù)庫(kù)結(jié)構(gòu)過(guò)程中所要遵循的規(guī)則和指導(dǎo)方法。數(shù)據(jù)庫(kù)的設(shè)計(jì)范式是數(shù)據(jù)庫(kù)設(shè)計(jì)所需要滿足的規(guī)范。只有理解數(shù)據(jù)庫(kù)的設(shè)計(jì)范式,才能設(shè)計(jì)出率、優(yōu)雅的數(shù)據(jù)庫(kù),否則可能會(huì)設(shè)計(jì)出錯(cuò)誤的數(shù)據(jù)庫(kù)。
  反范式,不滿足范式的模型,就是反范式模型。反范式跟范式所要求的正好相反,在反范式的設(shè)計(jì)模式,我們可以允許適當(dāng)?shù)臄?shù)據(jù)的冗余,用這個(gè)冗余去取操作數(shù)據(jù)時(shí)間的縮短。本質(zhì)上就是用空間來(lái)?yè)Q取時(shí)間,把數(shù)據(jù)冗余在多個(gè)表中,當(dāng)查詢時(shí)可以減少或者是避免表之間的關(guān)聯(lián)。RDBMS模型設(shè)計(jì)過(guò)程中,常常使用范式約束我們的模型,但在NOSQL模型中則大量采用反范式。數(shù)據(jù)庫(kù)中范式和反范式的的主要區(qū)別在于:
  在范式化的數(shù)據(jù)庫(kù)中,每個(gè)事實(shí)數(shù)據(jù)會(huì)出現(xiàn)并且只出現(xiàn)一次;相反,在反范式化的數(shù)據(jù)庫(kù)中,信息是冗余的,可能會(huì)存儲(chǔ)在多個(gè)地方。
  范式化的優(yōu)點(diǎn):
  1)范式化的更新操作通常比反范式化要快。
  2)當(dāng)數(shù)據(jù)較好地范式化時(shí),就只有很少或者沒有重復(fù)數(shù)據(jù),所以只需要修改更少的數(shù)據(jù)。
  3)范式化的表通常更小,可以更好地放在內(nèi)存里,所以執(zhí)行操作會(huì)更快。
  4)很少有多余的數(shù)據(jù)意味著檢索列表數(shù)據(jù)時(shí)更少需要DISTINCT或者GROUP BY語(yǔ)句。
  范式化設(shè)計(jì)的schema的缺點(diǎn)是通常需要關(guān)聯(lián),較多的關(guān)聯(lián)可能使得一些索引策略無(wú)效,例如,范式化可能將列存放在不同的表中,而這些列如果在一個(gè)表中本可以屬于同一個(gè)索引。
  反范式的schema因?yàn)樗袛?shù)據(jù)都在一張表中,可以很好地避免關(guān)聯(lián)。缺點(diǎn)是update操作的代價(jià)高,需要更新多個(gè)表,至于這會(huì)不會(huì)是一個(gè)問(wèn)題,需要考慮更新的頻率以及更新的時(shí)長(zhǎng),并和執(zhí)行select查詢的頻率進(jìn)行比較。從另一個(gè)父表冗余一些數(shù)據(jù)到子表的理由通常是排序的需要。
  緩存衍生值也是有用的。如果需要顯示每個(gè)用戶發(fā)了多少消息,可以每次執(zhí)行一個(gè)昂貴的子查詢來(lái)計(jì)算并顯示它;也可以在user表中建一個(gè)num_messages列,每當(dāng)用戶發(fā)新消息時(shí)更新這個(gè)值。

免責(zé)聲明:機(jī)構(gòu)動(dòng)態(tài)部分文章信息來(lái)源于網(wǎng)絡(luò)以及網(wǎng)友投稿,本網(wǎng)站只負(fù)責(zé)對(duì)文章進(jìn)行整理、排版、編輯,是出于傳遞 更多信息之目的,并不意味著贊同其觀點(diǎn)或證實(shí)其內(nèi)容的真實(shí)性。