日期:2014-05-17  浏览次数:20347 次

寻求下关于数据库表结构设计
我有个需求,不同的企业,勾选剂型,可以多选。不知道该怎么存储较为好。请高手赐教。我现在想用一个字段存储。但是好像查询的时候很麻烦吧。也有人告诉我可以用动态表,但是不会,。请各位做过类似的告诉我一下,谢谢了。

------解决方案--------------------
证书表做主表,剂型做子表,通过证书编号关联两表。
------解决方案--------------------
再建个中间表,字段:ID,企业ID,剂型ID
------解决方案--------------------
跟我以前做过的一个功能类似,当时用一个int来存放,然后前端用int32类型(C#的),也就是它可以有32个搭配。如果不够就用int64。你图中每勾选一个,那么对应的那个位(假设左上角是对应int的最右边第一位)就记录为1,没选的就记录为0,然后查询的时候进行与或操作,就得出选了哪几个。

这个地方要保持选项的位置不变,可以增加,但是已经存在的不能变,不然出来的结果就不行了。

有点拗口,你自己慢慢体会
------解决方案--------------------
如果以后会按剂型分别查询的,
企业表做主表,再加一个企业-剂型关联表做子表

否则,无须子表,直接在企业表里
用',1,4,5,'这样的varchar内容表示剂型

用bigint的每位对应一种剂型,如:0x11001就相当于上面的',1,4,5,'

------解决方案--------------------
企业信息表:ID、企业名称、证书编号....
剂型信息表:ID、剂型....
企业剂型表:ID、证书编号、剂型1、剂型2、剂型3....剂型N(剂型1-n与剂型信息部中剂型字段对应,用0、1表示勾选)

简单明了,多好。
按剂型查企业:select * from 企业信息表 where 证书编号 in(select 证书编号 from 企业剂型表 where 剂型1=1 and 剂型m=1 )
按企业查剂型:select * from 企业剂型表 where 证书编号 in (select 证书编号 from 企业信息表 where 企业名称=xxx),这个查出来会有没有勾选的企业,再在外面处理下就好了。
插入的话:insert into 企业剂型表(剂型1、剂型m) values (1,1) where  证书编号=abcdefg