Hopes

          Start Here..

           

          數(shù)據(jù)庫字典表設(shè)計

          數(shù)據(jù)庫字典表設(shè)計

           

          http://junjunbest.iteye.com/blog/395421

           

          ================================================================================================================================

           

          字典表設(shè)計及應(yīng)用舉例      為了響應(yīng)志峰兄弟的需求,今天抽了點時間寫點關(guān)于字典表設(shè)計的東西,順便結(jié)合一個小的應(yīng)用對設(shè)計做個用例體驗。
          咱先來看看什么叫字典。
               時間緊張,先略了,以后再談呵呵
          字典存在的必要性及他的好處。
               同上^_^
          字典設(shè)計思路。
               字典信息在系統(tǒng)中充當(dāng)基礎(chǔ)參數(shù)的角色,基本上有些重要的基本信息是要在系統(tǒng)在為正式業(yè)務(wù)服務(wù)之前就由系統(tǒng)管理員維護(hù)進(jìn)去的,有的字典信息是在使用過程中由系統(tǒng)管理員或者其他用戶維護(hù)進(jìn)去的。

               也就是說,我們有“維護(hù)字典信息”的需求,那么我們在設(shè)計字典信息表結(jié)構(gòu)的時候就要考慮到這個需求。
               在維護(hù)的時候,我們肯定希望能對字典信息分文別類的進(jìn)行維護(hù),這樣我們需要設(shè)計一個字典類類別表(Dic_Type),結(jié)構(gòu)如下:
               ID(字典類型ID) 
            Name(字典類型名稱)

               具體表數(shù)據(jù)特征請看下面的例子。
               有了類別表后,我們還需要一個存放每個類別的字典信息的具體數(shù)據(jù)表(Dic_Data):\

               ATID(自動增長的ID,沒有實際作用) 
            TypeID(字典信息歸屬的字典類別ID)
            ID(字典信息ID,在程序中使用的字典ID就是這個)
            Name(字典信息內(nèi)容)

               這樣,在我們的業(yè)務(wù)信息表中,存放的和字典相關(guān)的字段的值就是Dic_Data中的ID的值,那么就涉及到在界面上顯示信息的問題,如果不做處理,顯示出來的肯定就是原始的字典信息的ID,肯定不是用戶希望得到的,基于這個需求,
            我們?yōu)槊總€類型的字典信息做一個視圖(具體方法見后面的例子),
            將信息表與對應(yīng)的視圖做關(guān)聯(lián)查詢就可以得到字典信息ID對應(yīng)的真正內(nèi)容。

          應(yīng)用舉例。
               假定做一個學(xué)生信息管理系統(tǒng)
               字典類型表設(shè)計如下(Dic_Type):
               ID Name
               1  Sex
               2  ...

               字典內(nèi)容表設(shè)計如下(Dic_Data):
               ATID TypeID ID Name
               1    1      1   男
               2    1      2   女
               3    2      1   ...
               4    2      2   ...
               5    2      3   ...
               6    2      4   ...
              ...  ...    ...  ...

               性別類型字典的視圖(VW_Sex):
               select ID,Name from Dic_Data where TypeID=1

               假設(shè)學(xué)生信息表如下T_Student:
               ID Name  ... Sex
               1  采采  ...  1
               2  花花  ...  2
               3  剛剛  ...  1

               取學(xué)生列表信息可通過如下方法實現(xiàn):
               select T_Student.ID as StudentID,T_Student.Name as StudentName,VW_Sex.Name as SexName
               from T_Student left join VW_Sex on T_Student.Sex=VW_Sex.ID

               結(jié)果如下:
               StudentID  StudentName  SexName
               1              a            男
               2              b            女
               3              c            女

           

          時間倉促,寫的粗糙了點,還請見諒,有時間再補充。。。

          綠色通道:好文要頂關(guān)注我收藏該文與我聯(lián)系

           

          ================================================================================================================================

           

          我們現(xiàn)在在進(jìn)行數(shù)據(jù)庫字典表設(shè)計時,有二種方式,其一是傳統(tǒng)的方式,每個字典表都有ID、Name兩字段。第二種方式是將所有字典表的數(shù)據(jù)放在同一張表中,結(jié)構(gòu)如下:

          TypeTable(typeID,typeName)【主表,用來記錄字典表表名信息】;DataTable(typeID,DataId,DataName)【從表,記錄所有字典表數(shù)據(jù)信息】

          如性別、婚姻狀態(tài),在TypeTable中是兩條記錄,{02,性別},{06,婚姻狀態(tài)};而在DataTable中各有三條記錄{02,0,女 / 02,1,男 / 02,9,其它},{06,0,未婚 / 06,1,已婚 / 06,9,離異}

          另有一張病人列表patient(patientID,SexID,MarryStatusID…)

          現(xiàn)在需要查詢病人信息,sql語句如下:

          Select b.DataName as SexName,c.DataName as MarryStatusName

          from patient a left join DataTable b on b.DataId=a.SexID and b.typeID=’02’

          left join DataTable c on c.DataId=a.MarryStatusId and b.typeID=’06’


          在數(shù)據(jù)庫中執(zhí)行該Sql語句,由于DataTable約1000條左右的數(shù)據(jù)量,相對第一種方式必將對數(shù)據(jù)庫有一定的影響。

          (當(dāng)然在實際業(yè)務(wù)中可能類似的字典表約達(dá)5-10個,patient的數(shù)據(jù)量約500w條)


          但不知道在一個系統(tǒng)中所有字典表獲取數(shù)據(jù)都采用這種方式對數(shù)據(jù)庫性能到底影響到什么程度,約降低百分之幾的性能?會有其它隱患沒?

          ================================================================================================================================

          樓上的可能沒明白樓主的意思。

          不是指學(xué)歷表和國籍表數(shù)據(jù)量大,而是指人員表所具有的屬性可能太多(這里不一定指人員表,也可能是其它的實體,即隨著系統(tǒng)的復(fù)雜程度增加,實體的屬性增加)。這里以人員為例,說了國籍和學(xué)歷兩個屬性,如果人員還有職位,那么必然多出職位表,如果還有其它...

          那即,當(dāng)取得一條實例的完全數(shù)據(jù)時,那將進(jìn)行幾十個表的join,樓主考濾的應(yīng)該是這個問題。

          person_info(person_id,name,country_id,education_id,position_id,....) 
          country(country_id,name,...) 
          position(position_id,name,...) 
          education(education_id,name,....) 
          ...


          所以樓主采用了另一種設(shè)計方式: 
          所有屬性類(屬性本身也是實體,只不過是主表的某個屬性)放置在一個表中,用屬性名和屬性值來區(qū)別。 
          persion_info(persion_id,name,...) 
          1 aaa 
          2 bbb 
          attributes(attributes_id,persion_id,attributes_name,attributes_value) 
          1 1 country china 
          2 1 education 小學(xué) 
          3 1 position 公司總裁 
          4 2 country usa 
          5 2 education 碩士 
          6 2 postion DBA 

          posted on 2012-08-06 10:35 ** 閱讀(15107) 評論(3)  編輯  收藏

          評論

          # re: 數(shù)據(jù)庫字典表設(shè)計 2014-10-11 17:26 asd

          you is 逗比?  回復(fù)  更多評論   

          # re: 數(shù)據(jù)庫字典表設(shè)計 2014-12-11 13:30 dee

          @asd
          哈哈 你在自黑嗎 英文不會說就不要說 說錯了丟人噠  回復(fù)  更多評論   

          # re: 數(shù)據(jù)庫字典表設(shè)計 2016-04-27 16:06 dsfasf

          asdasdas  回復(fù)  更多評論   


          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

          統(tǒng)計

          公告

          你好!

          常用鏈接

          留言簿(2)

          隨筆檔案

          文章分類

          文章檔案

          新聞檔案

          相冊

          收藏夾

          C#學(xué)習(xí)

          友情鏈接

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 玉溪市| 保山市| 永年县| 定西市| 余庆县| 永丰县| 汉源县| 安福县| 察隅县| 当阳市| 河津市| 长宁县| 普宁市| 承德县| 龙南县| 鲁甸县| 天祝| 锡林郭勒盟| 临桂县| 石台县| 汝阳县| 页游| 大连市| 深圳市| 额尔古纳市| 新昌县| 廊坊市| 会昌县| 日喀则市| 汕尾市| 宜丰县| 酉阳| 东乌珠穆沁旗| 梓潼县| 陇西县| 仪征市| 大厂| 化隆| 吉安县| 普安县| 景东|