晒一种数据库设计
来源:互联网 发布:环球易购 知乎 编辑:程序博客网 时间:2024/04/30 17:42
最近接触了一个有关人员管理的数据库设计,对其设计风格十分不解。
首先,是一个基础数据表,table name: table01
表的设计
设置联合主键:ctype和ccode
columntype ctypestringnot nullccode stirngnot nullcnamestringnot null
数据示例
ctypeccodecname ctypeccodecname0001性别 0002学历0003科目 0004成绩等级0005技术级别 0006关系0111男 0112女0211专科 0212本科0213硕士 0214博士0311A编程语言JAVA 0311B编程语言Ruby0312面向对象 0313数据库泛型0411可 0412差0413良 0414优0511工程师 0512高级工程师0611父母 0612子女0613配偶 0614兄弟姐妹
在这张表中,ctype为'00'的是类别,这些类别的ccode在其余的记录中,被用为ctype,以便给各个记录分组。例如“优、良、可、差”属于“成绩等级”组。
这个结构有点类似于“parent-child”的family表,即ctype类似于parentID,ccode类似于ID,但是由于ctype不可空,也不可能在parentID设置外键。这样,无法在数据库的层面上保证所有记录都有一个分组。
另外,由于存在“11A”“11B”这样的ccode,将ctype和ccode类型设置为string。这样一来,not null的限制作用就被削减了,因为string 类型可以有string.empty的情况,它不是null,但也不是合法值。
之后,其他表都会引用这个基础数据表,table name: table02
表的设计
columntype idstringnot nullnamestirngnot nullgenderstringnot nulleducationlevelstringnot nullskilllevelstringnot null
数据示例
idnamegendereducation_levelskill_level00001111某A11111100001112某B12 11
在这张表中,gender、educationlevel、skilllevel本应是引用到table01的外键,但是ccode并不是唯一键,不能被引用。必须是ctype和ccode的联合唯一键才有意义。也就是说,需要gender引用table01的联合主键,这样的结构数据库并不支持。
本例采用的方式是不设置任何外键约束,在gender中直接填写与“男”或“女”ccode相符的字串(当然并不能排除string.empty或"11"、"11"以外的值),而此处的“11”到底是代表“男”还是“初级工程师”还是“父亲”,完全hard code在程序里。就是类似于if(column.name is gender) then {find in table01 where ctype is '01' and ccode = column.value}
只能赌定table01中的数据永远不变化。
还有诸如家属表,会用引用到ctype是00的数据;成绩表会用到ctype是03和04的数据;等等。
它们都和table02有相同的问题。
问题是,table01中的ctype不同的数据,是会被不同的表引用的,将其全部归结到一张表里,用意究竟在哪里呢?
- 晒一种数据库设计
- BBS的一种数据库表设计(转)
- 一种非直连数据库WEB应用架构设计
- 数据库的一种完全面向对象设计模式
- 设计是一种病
- 又一种设计思路
- 设计,是一种态度
- 设计,是一种态度
- 设计,是一种态度
- 一种三极管开关电路设计
- 一种权限系统设计
- 程序设计是一种设计
- 一种权限系统设计
- 设计是一种体验
- 一种数据库模式
- 数据库的一种完全面向对象设计模式(包含实例) Rayphrank原创!
- 晒圈数据库设计
- MVC不是一种设计模式,而是一种设计思想
- LPCWSTR和CString 转换,在WideCharToMultiByte函数中应用
- API之打印函数
- [企业管理]一个软件企业管理的典型案例分析
- quartz cron 表达式详解
- 关于.NET接口的一些资料
- 晒一种数据库设计
- mysql索引
- 用别人喜欢的方式去爱他们
- 创建透明画刷
- SqlServer:CTE函数处理递归(WITH语法)
- Shell中操作数据库
- 特殊字符处理
- Thread
- lucene 漫谈(一)