1
yocoso 2016-05-28 04:09:36 +08:00
我花了 5 分钟看你的问题,没看懂,我放弃了。
如果你想问的是: 1. 一个表拥有这些固定项: [报告 id],[报告编码],[报告状态],[承检机构],[收样日期],[检验类别],[入库日期] ,[检验流程] ,[型号规格],[样品类别],[样品等级],[样品名称],[生产单位],[样品数量],[计量单位] 2. 还需要根据用户需求增加一些额外信息,额外信息不定 3. 可以调整字段在 UI 上的顺序 那么我的回答是: 1. 竟可能的明确固定项,如果[委托单位] ,[存放位置],[单位地址]是将来 某些 产品会需要的信息,那么就把它作为单独一个字段。 2. 如果实在有现在没想到的,将来一拍脑瓜子出现的。有两种方式解决: a. 新增一张表 b. 这张表新添一个字段叫做 extra ,里面存键值对比如 {拍脑瓜子想出的字段:不是很重要的信息,不小心发现我们还需要这个信息:那就存在这里把} 3. 关于字段的显示顺序,可以纯 UI 上实现。但如果想记住调整的顺序的话,得再用一张表来存。 |
2
chaegumi 2016-05-28 07:14:00 +08:00
|
3
saulshao 2016-05-28 08:44:14 +08:00
纵向表(A-V 对)和横向表(常见的表)之间的区别,从逻辑上看其实不大,但是所有的关系数据库系统都是基于列来进行查询、索引、主外键等操作,因此,横向表在性能上优势明显。 @yocoso 的回答我完全赞同,应该尽量确保能确定的字段放在横向表,如果实在是要考虑扩展,可以使用纵向表。
|
4
heeryuy 2016-05-28 09:32:50 +08:00
也可以参照一些 CMS 系统的做法,自定义添加一列时同时直接在数据库里面增加对应的列,这样还能对自定义列做查询
|
5
qile1 OP |
6
yocoso 2016-05-29 02:20:51 +08:00
@qile1 我觉得针对质检产品信息这个应用场景,需要记录的项目应该是有数的,不会天马行空突然多一些不着边际的字段。还是设计成横向表。需要增加新字段就新增一列,不是分布式数据库的话,这个就是改一个 schema ,很简单。
|
7
tftk 2016-05-29 08:07:18 +08:00
使用了 EAV 模型,你将失去很多数据库提供的方便之处,包括不限于强制属性存在,引用完整性,
多查询一个字段,就要多 join 一次表,等等。 这种情况可以很方便的使用 PostgreSQL 的 JSON 类型解决。 |