常见数据库设计(1)——字典数据
2016-04-19 14:02
323 查看
在稍大一些的项目中,我们总是需要管理各种各样的类型类型数据(如商品类型、游戏类型。。。)。对于这些类型的管理类似,如果为每
一种类型都建立一张表去维护(而在项目中,正常出现50种类型),那工作量是可想而之大,并且我们不得不去了解每一个类型表的名字,
以去关联它。
因此,我们需要一种数据模型以完成对多种多样类型管理的需求。
字典表dictionary
字段名 类型 是否可空 中文名 描述
dict_name varchar(50) no 字典名字
dict_value int no 字典值 固定的,不变的
字典数据表dictionarydata
字段名 类型 是否可空 中文名 描述
id int no 自增长
dict_value int no dictionary中的值
dictdata_name varchar(50) no 字典名字
dictdata_value varchar(5) no 字典值 固定的,不变的
isfixed int no 是否固定 0默认为不固定,1固定;固定就不能再去修改了。
说明:dictionary中的dict_value和dictionarydata中的dictdata_value都是添加完不可变的,其它表的类型字段存取的是dictionarydata
中的dictdata_value,在查询关联时,需要添加dict_value的约束(注:有人习惯存取dictionarydata中的ID,这样在查询时可以少
加dict_value的约束。但是在系统的升级,或错误删除dictionarydata表时,后果将是空难性的,并且存取dictdata_value主表的类型字段
简单明了,立即可以知道它是什么类型,所以建议存取dictdata_value)。
表扩展:对于现有的设计,如果需要类型数据需要简单的树形结构,可以在dictionarydata可添加parent_id;如果需逻辑删除数据时,可以
添加iscancle;
最后,在程序中最好再建立两个类dictionary、dictionarydata里面定义整型变量对应于dict_value和dictdata_value值,这样在程序中就
可以通过代码来引用类型数据。
一种类型都建立一张表去维护(而在项目中,正常出现50种类型),那工作量是可想而之大,并且我们不得不去了解每一个类型表的名字,
以去关联它。
因此,我们需要一种数据模型以完成对多种多样类型管理的需求。
字典表dictionary
字段名 类型 是否可空 中文名 描述
dict_name varchar(50) no 字典名字
dict_value int no 字典值 固定的,不变的
字典数据表dictionarydata
字段名 类型 是否可空 中文名 描述
id int no 自增长
dict_value int no dictionary中的值
dictdata_name varchar(50) no 字典名字
dictdata_value varchar(5) no 字典值 固定的,不变的
isfixed int no 是否固定 0默认为不固定,1固定;固定就不能再去修改了。
说明:dictionary中的dict_value和dictionarydata中的dictdata_value都是添加完不可变的,其它表的类型字段存取的是dictionarydata
中的dictdata_value,在查询关联时,需要添加dict_value的约束(注:有人习惯存取dictionarydata中的ID,这样在查询时可以少
加dict_value的约束。但是在系统的升级,或错误删除dictionarydata表时,后果将是空难性的,并且存取dictdata_value主表的类型字段
简单明了,立即可以知道它是什么类型,所以建议存取dictdata_value)。
表扩展:对于现有的设计,如果需要类型数据需要简单的树形结构,可以在dictionarydata可添加parent_id;如果需逻辑删除数据时,可以
添加iscancle;
最后,在程序中最好再建立两个类dictionary、dictionarydata里面定义整型变量对应于dict_value和dictdata_value值,这样在程序中就
可以通过代码来引用类型数据。
相关文章推荐
- mysql取前10条数的查询语句
- 安装mysql
- Oracle学习笔记(二十七)——定义并使用变量
- SQL语言创建数据库表
- Oracle学习笔记(二十六)——触发器
- Oracle学习笔记(二十五)——包
- 常用SQL查询语句
- Oracle学习笔记(二十四)——函数
- Oracle级联查询
- 数据库中的join
- Oracle学习笔记(二十三)——过程
- Oracle存儲過程-用JAVA調用總結
- SQL Cursor生命周期
- 数据库学习之旅——实验2
- SharePoint 2013 使用 RBS 功能将二进制大型对象 BLOB 存储在内容数据库外部。
- Chapter 2 User Authentication, Authorization, and Security(1):选择Windows和SQL 身份验证
- Mariadb 10.1 joiner节点加入报错WSREP: Failed to prepare for incremental state transfer
- Oracle学习笔记(二十二)——块
- mysql 10060远程不能访问
- MYSQL中replace into的用法以及与inset into的区别