資料庫設計和事務

2021-04-02 05:35:14 字數 2802 閱讀 4763

#資料庫設計

·資料庫設計的乙個主要目的是消除資料庫的冗餘。為此要使用標準化(normalization)技術

·資料庫冗餘:如資料庫表中的多行資料有重複出現的情況,這回導致兩個問題:

1)每次查詢時,都必須一次又一次的輸入同一查詢條件;

2)也是更為重要的,如果任何乙個資料發生了變化,就必須在多個位置上進行更新。

·實體(entity,即表):是關於要獲取哪些資料的重要實物或物件,不是所有的「事物」都是實體,只有那些你

需要從中獲得資訊的事物才是實體。如果某事物不具有屬性或關係,那麼它就不是真正的實體。·每個實體例項

代表表中的一行。

·實體屬性(即表中的字段):描述有關必須得到的實體的資訊。

·實體例項(即表中的行)

·資料庫模型:是資料庫設計的**,在設計資料庫的第一步即建立邏輯資料模型,不需要考慮屬性是如何儲存

的·資料庫實體在資料庫模型中被標示為乙個方框

·資料庫標準化:消除資料庫設計中某些不符合要求的特性,確切的講,其目標是去除某種資料冗餘,從而避免

更新異常。20世紀70年代,有ibm的研究員e.f.codd在幾篇重要的**中提出。

·更新異常是由於資料結構方面的原因,在資料庫進行插入、更新和刪除操作時造成的困難。

·標準化的一般概念包括幾個「正規化」(normal form)

·第一正規化(1nf):所有屬性(即字段的值)的值是單一的。必須要驗證實體的每個屬性對應於實體的每個例項

都有單一的值。如果任何屬性有重複的值,它就不符合1nf。

·第二正規化(2nf):如果實體符合第一正規化,並且其所有的非標識屬性都完全依賴於實體的唯一識別符號,則稱實

體符合第二正規化。

·第三正規化(3nf):實體符合2nf並且其所有的非標識屬性均不依賴於其他任何非標識屬性,則稱這個實體符合

第三正規化(3nf)。

·遇到違反3正規化的問題時,識別新的實體,解決問題。

·邏輯資料建模的過程

1)標識並建立實體

2)標識並建立實體間的關係

3)標識並建立屬性

4)為每個實體標識唯一識別符號

5)標準化

注意:這個過程並非是線性的

物理資料庫設計

1)實體成為物理資料庫的表

2)屬性成為物理資料庫的列,為每列選擇合適的資料型別

3)惟一識別符號成為不允許為null值的列。在物理資料庫中稱為主鍵(primary key),也可以為識別符號建立惟一

索引來強制惟一性。

4)關係被構建為外來鍵。

·有重複的實體標示我們至少漏掉了乙個其他實體,應該新增該實體,即新增新的表。

·實體規則:每個實體都必須具有乙個唯一的識別符號,稱之為id,id滿足一下規則

1)在實體的所有例項中是唯一的

2)在實體的每個例項的整個生命週期中都有非null值

3)在例項的整個生命週期中,它的值不會改變。

·識別符號的選擇是非常重要的,因為識別符號也用來建立關係。如果在選擇了實體的id之後,發現它不能滿足以上

的規則,就會影響到整個資料模型。

·識別符號問題的解決辦法是建立乙個標識屬性,它除了作為標識屬性之外沒有其它的意義。

·關係:由實體的識別符號我們可以建立其關係,關係描述了兩個實體的二元關聯。關係中每個實體描述了另乙個

實體,同時也被另乙個實體所描述。關係的兩端都包括兩個部分:乙個名和乙個度。

·度:表示必須有多少實體例項才能描述乙個被描述的實體例項,度使用兩個不同的值表示:「乙個且僅有乙個

(1)」和「乙個或多個(m),度要涉及到方向。

·如果任何屬性不完全依賴於實體的惟一識別符號,那麼這個屬性必定是放錯了位置,必須去除。

·在實體建立關係時,重要的是確定關係的兩個方向

·一對一關係非常少,事實上,如果你在資料庫建模期間遇到了這樣的關係,就因該仔細看一下你的設計。一對

一關係暗示著兩個實體實際上是相同的,應該合為乙個實體。

·多對多關係都需要解決,如通過連線實體轉換為一對多關係,否則在將資料模型裝換為物理模式時就會遇到問

題。·一旦改進了資料模型就因該只有一對一關係和一對多關係,多對多關係已經通過連線表被轉換了。需要通過為

關係所涉及的表新增外來鍵來建立關係。外來鍵是處在關係中另一端的惟一識別符號或主鍵。最常見的關係是一對多關

系。這個關係通過把」一「方的主鍵置於」多」方的表中完成對映。

#事務mysql起初不支援事務,現在提供了兩種事務安全的表型別:bdb和innodb

事務會嚴重影響資料庫的效能

事務隔離層:用於確定當你處於事務處理中時別人所看見的東西

髒讀取:發生在乙個事務觀察另乙個事務未提交的改變時,如果最初的事務回滾了它的改變,那麼讀取資料的事

務就被稱為取得了「髒」資料。

重複讀取:發生在乙個事務始終用相同的查詢讀取相同的內容時,而不管查詢進行了多少次,或者其它事務對第

乙個事務所讀取的行進行了多少次改變,換句話說,進行重複讀取的事務沒有看到其他事務所提交的改變。

幻影讀取:發生在其它事務產生了乙個新行,而這一行可以匹配你的事務的where子句,你的事務看到了另乙個事

務未提交的改變。

mysql支援下列事務隔離層:

serializable:事務只允許提交的重複讀取。幻象讀取不允許。

repeatable read:事務允許提交的重複讀取和幻象讀取。

read commited:事務不允許髒讀取,但允許非重複的幻象讀取

read uncommitted:事務允許髒讀、非重複和幻象讀取

serializable的事務隔離級最高,read uncommitted的事務隔離級最低。但事務隔離級越高,應用的效能就越低

,一般read commited的事務隔離級能夠滿足應用的要求。

事務型資料庫設計經驗

以下是針對事務型資料庫設計經驗 1.資料庫設計經驗之是否使用聯合主鍵?個人傾向於少採用聯合主鍵。因為這樣會降低索引的效率,聯合主鍵一般都要用到至少乙個業務字段,往往是字串型的,而且理論上多字段的索引比單字段的索引要慢些。看上去似乎也不那麼清爽。在實際的設計中,我盡量避免使用聯合主鍵,有些時候 不得不...

資料庫 正規化和事務

所謂第一正規化 1nf 是指資料庫表的每一列都是不可分割的基本資料項,同一列中不能有多個值,即實體中的某個屬性不能有多個值或者不能有重複的屬性。如果出現重複的屬性,就可能需要定義乙個新的實體,新的實體由重複的屬性構成,新實體與原實體之間為一對多關係。在第一正規化 1nf 中表的每一行只包含乙個例項的...

資料庫事務和鎖

事務是作為單個邏輯工作單元執行的一系列操作,乙個邏輯工作單元必須有四個屬性 原子性,一致性,隔離性和永續性 acid 屬性。事務的回滾 將顯式事務或者隱式事務回滾到事務的起始點或者是事務內的儲存點。關於鎖的引入 併發導致的幾種問題 引入鎖既可以在一段時間內禁止使用者做某些操作以免導致產生資料不一致。...