主從表操作是資料庫相關程式設計中繞不過去的技術之一。為了減少資料冗餘、滿足資料庫的正規化要求,必需考慮建立主表和從表,從以外鍵關聯。主從表可以看做是對母表進行縱向切割而得到的。
由於表個數的增加,和外來鍵關係的存在(「關係型資料庫」的名稱就是從這裡來的吧?),使操作主從錶比操作單錶複雜了很多。程式設計的複雜度和工作量也成倍增加 - 至少增加了3倍。
主從表從表設計和程式設計角度一般可以這麼做:
1,主表和從表分離,以外鍵關聯。
這是最常見和典型的做法,資料庫理論的教科書上一般就是這麼講的。這樣做的好處是,充分利用關係型資料庫的優點,從表可以有多個字段,可以儲存大量的資料和記錄個數。而且由於客觀上實現了表的縱向切割,使資料儲存結構得到了優化。但由於牽扯到2個表,所以程式設計時,對錶的編輯(增、刪、改、查)總是涉及到二個步驟,還會引起主表和從表操作的原子性問題,即:主表資料操作完成後,同乙個事務裡,從表的關聯資料操作是否也全部完成了?在一些關鍵行業的關鍵業務裡,主從表操作必需以事務的方式來操作,主表和從表操作,要麼全部完成,要麼乙個都不完成,只要其中乙個出錯,事務必需回滾到未操作前的狀態(這一般是 「事務」機制自動完成的)。所以編碼考慮的因素很多。
2,另一種變通的方法是,從表的資料存貯在主表同一條記錄的另乙個欄位裡,用分隔符連線起來。
這樣以來,不用建立主從表之間的外來鍵關聯 - 命存一線,本身就「關聯」起來了。好處是編碼簡單。但會引起以下問題:
(1)分隔符可能與儲存的資料中的字串重複,引起混淆;
(2)當子表中的記錄過多和/或過長的時候,顯得愚笨,並會有儲存上的問題;
(3)不適合記錄是二進位制資料的從表。
(4)從表的字段多於乙個時,基本很難實現。
既然是變通的方法,這種方法僅適合部分情況:從表資料型別一般是字串型,且資料很短;從表記錄很少,不需要通過建立索引來提高檢索效率。從表的字段也必需較少,最好就乙個字段,多於2個,程式設計的某些細節就反而複雜了。
所以,無果有十足的把握,或確信從表不會再重構的情況下,才採用第二種辦法。否則還是乖乖按照資料庫理論來做,以減少可能發生的風險,保證專案進度。
主從表設計和程式設計的幾種實現辦法
主從表操作是資料庫相關程式設計中繞不過去的技術之一。為了減少資料冗餘 滿足資料庫的正規化要求,必需考慮建立主表和從表,從以外鍵關聯。主從表可以看做是對母表進行縱向切割而得到的。由於表個數的增加,和外來鍵關係的存在 關係型資料庫 的名稱就是從這裡來的吧?使操作主從錶比操作單錶複雜了很多。程式設計的複雜...
kbmMW 實現主從關係表的方法
環境 delphi xe10.2.2 kbmmw5.02 unidac7.02 fb3.0 在日常應用中,我們經常會用到主 從 master detail 關係表,如客戶與訂單 角色與許可權等。在 kbmmw 中實現mater detail 關係表的方法有兩種,各有優缺點。下面是我實現這兩個方法的過...
資料庫查詢優化 主從表的設計
寫過許多的資料庫查詢語句,面對過許多的問題,也在磕磕碰碰中學到了很多東西。昨天在看系統資料庫設計與sql 時,突然 發現 了許多平常不屑看到的問題,於是就萌生了把它提出來思考的念頭 舉乙個例子,我現在有一些新聞資訊,它包括這些字段 新聞id,新聞name,新聞shortintro,新聞detail,...