成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

《數據庫重構》讀后感

數據庫
筆者剛剛聽到數據庫重構這件事,認為這是不可能的。于是去借了《數據庫重構》這本書來觀看,下文是筆者關于這本書的一些介紹和讀后感。

說實話我也是前兩周才知道有數據庫重構這回事,當時聽說這個概念的時候,唯一的反應就是:數據庫居然也能重構?剛好上周去圖書館借書,看見了《數據庫重構》這本書,就借回來看了幾章。下面會結合自己的體會介紹一些這本書的一些觀點。

數據庫重構概念

數據庫重構是對數據庫Schema進行的簡單改動,在保持行為和信息語義的前提下改進設計。

數據庫重構可以重構數據庫Schema的結構:比如表、視圖的定義、修改; 重構數據庫的功能:如存儲過程、觸發器等。

數據庫重構的困難

數據庫重構其實并不像代碼重構那么簡單,對數據庫結構的改動,真的是牽一發而動全身。可能你要改動業務邏輯層、UI表示層、甚至是牽連到一些其它模塊、外部調用程序,還有像數據庫里面的函數、存儲過程、觸發器等、光是把這些牽扯的例舉出來,都會讓你頭皮發麻,還要大量的測試;而且對一個已經上線的系統,你有這個魄力去重構嗎?就算你有,未必其它同事、尤其拍板的人(經理)也未必同意,這里面的風險太大,代價太大了…..其實這都是因為數據庫重構比代碼重構難,復雜。下面是我自己概括的一些:

  1. 代碼重構只需要保持行為語義,而數據庫重構還要保持信息語義。
  2. 數據庫架構所導致的耦合度(數據庫與外部程序是高度耦合的),數據庫重構變得相當復雜。按情況分分為單應用數據庫、多應用數據庫(相對復雜得多),下面是我按書上圖畫的單應用數據庫和多應用數據庫。

  3. 數據庫重構缺少工具支持。像代碼重構,很多IDE(集成開發環境)都已經提供了代碼重構功能,比如VS里面菜單欄里面有重構選項,許多人都經常使用。但是數據庫到現在為止沒啥工具支撐。相信數據庫工具提供商以后也一定會增添這些功能的。
  4. 數據庫設計、開發采用傳統的、串行式的思維過程,基本上忽略了敏捷的方式(說實話,我對作者這個觀點不太理解)。我的理解數據庫開發一直采用傳統的建模,設計,然后編碼實現,沒有采用反映現代方法學(如XP 和RUP)的演進式方式。
  5. 不是每個開發者對系統各部分、數據庫架構都十分了解,不是每個人都精通數據庫和應用程序開發。也就是說可能某人只精通數據庫、而不精通C#開發,那么重構就顯得比較困難。還有很多人只了解系統的部分結構,而不了解整體,這對數據庫重構影響很大,作者建議結對編程,DBA和架構師(技術人員)結對進行數據庫重構

數據庫重構的分類

  1. 結構重構:對一個或多個表或試圖做一些變更。比如將一列從一個表移到另外一個表,將多用途的列拆分為一些單獨的列。每個列用于單一用途。
  2. 數據質量重構:一種變更,改進了數據庫中所包含信息的質量。例如,不允許列為空,確保它總是有值,或對一列采用統一格式,確保一致性。
  3. 參照完整性重構:一種變更,它確保參照的行在另外一個表的存在,并確保不需要的行被相應地刪除。增加觸發器支持兩個實體間的層疊式刪除。
  4. 架構重構。一種變更,它從整體上改變了外部程序與數據庫進行交互的方式。用存儲過程取代部分代碼和腳本。
  5. 方法重構:對方法(存儲過程、函數、觸發器)的一種變更,改進方法質量,比如存儲過程改名,把存儲過程里面的*用相應的字段替換、、、、、
  6. 替換:這不屬于重構,轉換時對數據Schema的一個變更,它改變了Schema的語義。

數據庫味道

正如Flower在重構里面說的代碼的壞味道一樣,作者也嘗試總結了一些數據庫的壞味道。

  1. 多用途的列。 如果一個列被用于多種用途,就有可能存在額外的代碼來確保數據以“正確的方式”使用。個人認為像表里面用來判別性別、是否刪除的字段這樣的多用途列還不是壞味道,如果超出了兩個應用,就應該考慮重構了。
  2. 多用途的表。 如果一個表用來存放多種不同數據來源的數據。
  3. 重復的數據。重復的數據對操作型數據庫來說是一種嚴重的問題,因為數據存放在幾個地方,不一致的機會就增加了。個人認為適當的冗余還是必須的。這個只能試情況而論。
  4. 列太多的表。一個表包含太多的列時,說明表缺乏內聚——它試圖存放來自幾類實體的數據。我見過一個表幾十個字段的設計,只能用“無語”來形容我的感受。
  5. 行太多的表。大的表就有性能問題,查找就十分耗時,你這時就需要對表進行垂直分割:將一些列移到另外一個表,將一些行移到另外一個表,進行水平分割。
  6. “智能”列:智能列是這樣一種列,其中數據的不同位置代表了不同的概念。這個我不太了解(沒有這方面的使用經驗),作者的建議進行更小粒度的分割字段。
  7. 害怕變化。如果你害怕改變你的數據庫Schema,因為你擔心更改會破壞其它很多應用程序,那么這就是一個明確的信號。

數據庫重構在開發中的位置

作者提到了大多數面向數據技術本質上都是串行的。諸如邏輯數據建模或物理數據建模。希望數據庫DBA采用類似開發者使用的現代演進式技術來開發,并能從中獲益。作者提供了一幅圖關于在一些關鍵開發活動中的高層視圖,這些活動發生在涉及對象和關系數據庫的現代項目中。請注意,所有的箭頭都是雙向的。你需要在這些活動之間來回迭代。同時注意沒有定義起點和終點——顯然這不是傳統的串行式過程。

原文鏈接:http://www.cnblogs.com/kerrycode/archive/2011/03/14/1984260.html

【編輯推薦】

  1. NoSQL理論研究:內存是新的硬盤,硬盤是新的磁帶
  2. 關于NoSQL數據庫你應該知道的10件事
  3. NoSQL就業形勢分析:Cassandra和MongoDB***
  4. NoSQL架構實踐(二)以NoSQL為主
  5. NoSQL架構實踐(一)以NoSQL為輔
責任編輯:艾婧 來源: 博客園
相關推薦

2025-03-19 07:30:53

2015-08-17 09:59:49

MVCReact數據庫

2009-09-27 16:09:08

CCIE考試

2011-12-30 09:47:30

程序員

2014-12-05 09:59:17

程序員

2009-03-31 17:01:56

Linux開源SaaS

2024-02-20 12:50:51

GPT-4人工智能芯片

2011-08-10 15:46:29

數據庫

2022-11-14 18:23:06

亞馬遜

2011-11-04 14:07:40

存儲

2021-09-28 09:25:05

NoSQL數據庫列式數據庫

2021-05-17 06:57:34

SQLServer數據庫

2020-11-09 14:34:09

華為云GaussDB行業

2011-08-02 15:04:49

2010-07-29 14:08:33

2011-05-13 09:42:21

2010-09-30 09:11:01

2010-09-30 08:27:48

2020-11-23 16:42:38

數據庫MySQL技術

2021-09-06 10:24:12

鴻蒙HarmonyOS應用
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产成人在线一区二区 | 中文字幕av色 | www亚洲精品 | 精品一区二区三区在线观看国产 | 亚洲精品在线免费观看视频 | www.99re| 国产精品久久久久久久久久久久久久 | 中文字幕国产精品 | 久久网日本 | 中文一区 | 亚洲一区二区视频 | 国产一区欧美 | 99久久婷婷国产亚洲终合精品 | 黄色大片在线 | ririsao久久精品一区 | 天堂久久一区 | 国产免费视频在线 | 毛片免费在线 | 国产日韩精品在线 | 最新中文字幕久久 | www国产亚洲精品久久网站 | 久久久久欧美 | 欧美一级免费片 | 中文字幕av网 | 精品国产91乱码一区二区三区 | 免费在线观看成年人视频 | 做a网站| 91久久国产综合久久 | 久久99精品久久久久久 | 一区免费 | 在线观看免费毛片 | 亚洲视频在线看 | 亚洲免费在线观看视频 | 午夜无码国产理论在线 | 激情福利视频 | 超碰97免费 | 亚洲成人黄色 | 一区二区三区欧美在线观看 | www.av在线| 国产欧美日韩综合精品一区二区 | 成人av网站在线观看 |