`
dadi520
  • 浏览: 144108 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

数据库字典表设计

 
阅读更多

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

 

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

 

字典表设计及应用举例      为了响应志峰兄弟的需求,今天抽了点时间写点关于字典表设计的东西,顺便结合一个小的应用对设计做个用例体验。
咱先来看看什么叫字典。
     时间紧张,先略了,以后再谈呵呵
字典存在的必要性及他的好处。
     同上^_^
字典设计思路。
     字典信息在系统中充当基础参数的角色,基本上有些重要的基本信息是要在系统在为正式业务服务之前就由系统管理员维护进去的,有的字典信息是在使用过程中由系统管理员或者其他用户维护进去的。

     也就是说,我们有“维护字典信息”的需求,那么我们在设计字典信息表结构的时候就要考虑到这个需求。
     在维护的时候,我们肯定希望能对字典信息分文别类的进行维护,这样我们需要设计一个字典类类别表(Dic_Type),结构如下:
     ID(字典类型ID)
  Name(字典类型名称)

     具体表数据特征请看下面的例子。
     有了类别表后,我们还需要一个存放每个类别的字典信息的具体数据表(Dic_Data):\

     ATID(自动增长的ID,没有实际作用)
  TypeID(字典信息归属的字典类别ID)
  ID(字典信息ID,在程序中使用的字典ID就是这个)
  Name(字典信息内容)

     这样,在我们的业务信息表中,存放的和字典相关的字段的值就是Dic_Data中的ID的值,那么就涉及到在界面上显示信息的问题,如果不做处理,显示出来的肯定就是原始的字典信息的ID,肯定不是用户希望得到的,基于这个需求,
  我们为每个类型的字典信息做一个视图(具体方法见后面的例子),
  将信息表与对应的视图做关联查询就可以得到字典信息ID对应的真正内容。

应用举例。
     假定做一个学生信息管理系统
     字典类型表设计如下(Dic_Type):
     ID Name
     1  Sex
     2  ...

     字典内容表设计如下(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

     假设学生信息表如下T_Student:
     ID Name  ... Sex
     1  采采  ...  1
     2  花花  ...  2
     3  刚刚  ...  1

     取学生列表信息可通过如下方法实现:
     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

     结果如下:
     StudentID  StudentName  SexName
     1              a            男
     2              b            女
     3              c            女

 

时间仓促,写的粗糙了点,还请见谅,有时间再补充。。。

绿色通道:好文要顶关注我收藏该文与我联系

 

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

 

我们现在在进行数据库字典表设计时,有二种方式,其一是传统的方式,每个字典表都有ID、Name两字段。第二种方式是将所有字典表的数据放在同一张表中,结构如下:

TypeTable(typeID,typeName)【主表,用来记录字典表表名信息】;DataTable(typeID,DataId,DataName)【从表,记录所有字典表数据信息】

如性别、婚姻状态,在TypeTable中是两条记录,{02,性别},{06,婚姻状态};而在DataTable中各有三条记录{02,0,女 / 02,1,男 / 02,9,其它},{06,0,未婚 / 06,1,已婚 / 06,9,离异}

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

现在需要查询病人信息,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’


在数据库中执行该Sql语句,由于DataTable约1000条左右的数据量,相对第一种方式必将对数据库有一定的影响。

(当然在实际业务中可能类似的字典表约达5-10个,patient的数据量约500w条)


但不知道在一个系统中所有字典表获取数据都采用这种方式对数据库性能到底影响到什么程度,约降低百分之几的性能?会有其它隐患没?

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

楼上的可能没明白楼主的意思。

不是指学历表和国籍表数据量大,而是指人员表所具有的属性可能太多(这里不一定指人员表,也可能是其它的实体,即随着系统的复杂程度增加,实体的属性增加)。这里以人员为例,说了国籍和学历两个属性,如果人员还有职位,那么必然多出职位表,如果还有其它...

那即,当取得一条实例的完全数据时,那将进行几十个表的join,楼主考滤的应该是这个问题。

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


所以楼主采用了另一种设计方式:
所有属性类(属性本身也是实体,只不过是主表的某个属性)放置在一个表中,用属性名和属性值来区别。
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 小学
3 1 position 公司总裁
4 2 country usa
5 2 education 硕士
6 2 postion DBA

分享到:
评论

相关推荐

    通达OA 2017 数据库字典 表结构

    "2017通达OA数据字典.docx" 文件很可能是以Microsoft Word格式提供的详细数据库字典文档,它可能包含了通达OA 2017系统中所有关键数据库表的结构、字段说明、数据类型、主键外键关系以及可能的业务含义。开发人员...

    java生成数据库字典表mysql doc-generator

    Java生成数据库字典表MySQL Doc-Generator是一款实用的工具,旨在帮助开发者将MySQL数据库中的表结构信息导出为Word文档,方便进行数据库设计文档的整理和分享。这个工具简化了手动编写数据库字典表的过程,提高了...

    用友T+数据库字典

    "数据库字典工具T+版"是专为用友T+设计的辅助工具,它提供了以下功能: 1. 字典查看:用户可以查看所有数据库对象的详细信息,包括表结构、索引、触发器等。 2. 字典导出:支持将数据库字典信息导出为文本或Excel...

    mysql 生成数据库字典表 工具

    MySQL数据库字典表工具是用来管理和理解数据库结构的重要辅助软件,它可以帮助用户自动化地创建和维护数据库的元数据信息,即数据库的“字典”。在数据库管理中,字典表是存储关于数据库对象如表、视图、索引等信息...

    用友T3数据库字典

    用友T3是一款广泛应用于中小型企业财务管理的软件,其数据库字典则包含了软件运行所需的所有数据结构、表和字段的详细信息。 在数据库字典中,用户可以找到关于各个业务对象的数据定义,例如客户、供应商、库存商品...

    数据库字典 数据库 字典

    同时,数据库字典也用于数据库的设计和文档化,帮助开发者理解和使用数据库结构。 在SQL SERVER 2000中,数据库字典信息可以通过系统视图和存储过程访问,如`sysobjects`、`syscolumns`、`sysindexes`等。这些系统...

    泛微数据库字典

    这些表设计用于追踪企业内部的资产状况,如资产的状态、种类以及资产变动的相关记录。 2. **客户关系管理(CRM)相关的数据表**:CRM数据表关注于客户信息的管理和营销活动的记录。例如,客户信息表(CRM_...

    金蝶K3数据库字典详细说明

    7. **二次开发与报表设计**:对于系统管理员或开发人员,数据库字典是进行二次开发和定制报表的基础,可以依据这些信息创建SQL查询,实现自定义的数据提取和分析。 8. **系统维护**:在日常运维中,数据库字典可...

    04项目设计数据库字典

    在"04项目设计数据库字典"这个主题中,我们可以看到几个相关的文档,如"青软培训数据库字典模板.doc"和"上海规划局数据库字典.doc"等,这些都是为了指导和规范数据库设计而准备的文档模板。这些模板通常会包括以下...

    金蝶K3-Cloud云星空数据库表字典

    金蝶K3-Cloud云星空数据库表字典 金蝶K3-Cloud云星空是一款云计算平台,提供了丰富的云端...云星空数据库表字典是云星空开发和二次开发的重要组件,提供了丰富的数据库表设计和功能,帮助开发者快速搭建云端应用程序。

    U870 数据库字典

    2. 视图:视图是根据特定需求从一个或多个表中组合出的虚拟表,U870数据库字典会列出这些视图的创建语句,方便进行数据分析和报表设计。 3. 索引:索引是提升数据查询速度的关键,字典中会包含每个表的索引信息,...

    用友 U890 数据库字典

    这个数据库字典通常包含了U890系统中所有数据表的定义、字段信息、以及相关联的数据关系,是理解和操作U890系统数据库的基础。 用友U890是一款广泛应用于中国企业的财务、供应链、生产制造等领域的ERP(Enterprise ...

    SQL数据库字典生成器(带源码)

    - 文档维护:数据库字典为数据库的设计和维护提供了方便,使得团队成员可以迅速了解数据库结构,减少误解和错误。 - 数据迁移:在进行数据库迁移或升级时,字典可以作为参考,确保新系统与旧系统的一致性。 - ...

    数据库字典生成器

    数据库字典生成器是一种工具,它能够自动生成关于数据库结构的详细文档,也称为数据库模型或数据字典。数据字典在信息系统设计和管理中扮演着至关重要的角色,因为它提供了数据库中所有对象(如表、视图、索引、存储...

    数据库设计软件,可直接生成数据库字典

    "数据库设计软件,可直接生成数据库字典"这样的工具,极大地简化了数据库设计过程,并提高了开发效率。下面将详细讲解这个主题中的相关知识点。 首先,**数据库设计** 是指在创建数据库之前对数据库结构的规划和...

    数据库字典生成软件

    数据库字典生成软件是一种工具,它能够自动生成关于数据库结构、表、字段、索引等详细信息的文档,便于数据库管理员、开发人员和系统分析师理解并管理数据库。这个过程被称为数据库文档化,对于大型和复杂的数据系统...

    数据库字典工具T+版

    数据库字典工具T+版是一款专为T+12.5及以下版本设计的应用程序,旨在帮助用户更方便地管理和理解数据库中的数据结构和对象。这个工具允许用户直接连接到数据库,无需关注具体版本,提高了数据库管理的灵活性和效率。...

    T6数据库字典

    对于T6数据库字典来说,它专门针对T6企业资源规划系统(ERP)设计,提供了全面的数据库结构信息。T6 ERP是一款面向中小企业的管理软件,涵盖了财务管理、供应链管理、生产制造等多个业务模块。T6数据库字典则为这些...

    mssql生成导出数据库字典

    数据库字典是一个详细记录了数据库结构、表、字段、索引、关系和其他元数据的文档。这种工具或脚本能够帮助数据库管理员(DBA)和开发人员更好地理解数据库的设计和结构,方便维护和优化。 描述中提到的“可以快速...

    生成数据库字典的CodeSmith模板

    在开发过程中,拥有一个清晰的数据库字典有助于理解数据结构,进行设计、维护和文档化工作。 CodeSmith模板语言支持自定义模板,这意味着你可以根据需求创建特定格式的输出。对于生成数据库字典的网页模板,我们...

Global site tag (gtag.js) - Google Analytics