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
分享到:
相关推荐
安置房数据库设计表安置房数据库设计表安置房数据库设计表安置房数据库设计表安置房数据库设计表安置房数据库设计表
国际化代码数据字典表,excel表,包含id,pid,name三个字段,已建立好id与pid对应关系,可直接导入数据库作为数据字典表使用
方便做SQL视图或开发使用,运行K3CloudDataDictionaryexe.
数据库与数据表的设计——物理结构设计 9 5.1数据库与数据表的设计 9 5.2数据的完整性设计 12 6.数据库操作与实施结果——数据库对象的设计 13 6.1建数据库——工资管理库 13 6.2 建表 13 6.3创建视图 16 6.4 触发器...
(泛微e-cology8.0)数据库表结构设计文档,泛微数据字典
项目数据库设计及字典表
SqlServer2000数据库字典--表结构
(泛微e-cology7.0)数据库表结构设计文档,泛微数据字典
项目数据库设计及字典表.pdf.docx
校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖系统数据库设计.docx校园外卖...
1、oracle体系结构 2、基本概念 3、表空间类型 4、表空间设计原则 5、表空间的应用 6、表空间的维护 7、表空间的监控 8、表空间相关数据字典
医药销售管理系统【SQLServer数据库+课程设计文档】 1.需求分析 1.1系统目标与要求 1.2系统分析 2.系统逻辑方案 2.1数据流程图(DFD): 2.2数据字典(简称DD) 3.系统总体结构设计 3.1软件系统总体结构设计...
数据库课程设计,在线销售蛋糕,用的数据库是MySQL
数据字典维护数据字典维护数据字典维护数据字典维护数据字典维护
(一) 表设计 (二) 创建用户表,学生表,管理员表 (三) 创建视图,索引 (四) 物理模型设计图(.pdm图) 五. 数据库功能实现及界面展示 (一)登录模块设计 (二)管理员模块设计 (三)管理员模块设计 ...
东华HIS数据库基本表结构,完整版 密码:donghuahis
管家婆数据库表 "名称 "代码 " "职员信息表 "employee " "库存商品信息表 "Ptype " "往来单位 "btype " "摘要表 "Abstract " "地区信息表 "AreaType " "会计科目表 "atypecw " "仓库信息表 "Stock " "部门信息表 ...
泛微OA设计数据库表文件文档,方便各位同仁在运维OA需要拉数据时候做为数据字典使用。
2.2 逻辑结构设计 必须有由E- R得到的数据库表的设计;视图的设计;索引的设计;约束条件等。 2.3 物理结构设计 3数据库的实施 根据数据库设计中的逻辑结构建立数据库,录入部分数据(附结果截图)。 4. 应用程序...
导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构word设计文档,一键连接数据库,直接导出库表结构、字段解析、自动排序 导出 MySQL数据库表结构...