需要设计这么一个数据表,该表字段比较多,大概有200个字段,
然后我把它分类一下,拆分成6个组,分别放在6个表里。
为了方便描述,假设我分为2个表,共8个字段
tb:
sn ts tsid col0 col1 col2 col3 col4
x_01 Y_01 X_Y_01 0 1 2 a b
x_01 Y_02 X_Y_02 3 4 5 a b
--------------------------------------------------------------------------------------------
tb1:
sn ts tsid col0 col1 col2
x_01 Y_01 X_Y_01 0 1 2
x_01 Y_02 X_Y_02 3 4 5
--------------------------------------------------------------------------------------------
tb2:
sn col3 col4
x_01 a b
--------------------------------------------------------------------------------------------
说明:
tb是总表,主键为sn+ts(联合主键)
tb1是具体数据,用sn+ts来作为主键区别每一条数据
tb2是与sn相关的特性数据,仅以sn作为主键就行了
问题:
0、这样设计是否合理,还是将所有字段放在一张总表里(查询更新等是否会更快);
1、我插入的时候,可能有的表没有数据,我是插入一条空数据,还是不处理?【后续还有更新(存在则更新,不存在则插入)和查询】
2、我查询的时候,并非要查询所有的字段,
①我是直接连表,将所有数据查询出来【查询结果类似总表】,然后再在程序里获取你所需要的字段。
②还是判断参数属于那些表,分别,指定的只查询需要查询的字段。
暂时这三个问题了,我会慢慢贴出我的存储过程。(有问题的望指正),万分感谢!
------解决方案--------------------
200个字段其实没什么 为了方便 直接一张表搞定比较好。
------解决方案--------------------
性能、空间是略有影响
最关键是不要用 用户看得到的字段做主键、关联
用户的承诺(唯一、不变)是靠不住的,领导一句话,什么都要做到
------解决方案--------------------
垂直切割也不是坏事,不过sqlserver支持1024个列,200多不算多,即使是OLTP系统,1、200也可以。重点是切割的时候你要预估一下带来的一系列问题:比如冗余、数据唯一性、存储空间压力、增删改查的提升的性价比。要是高代价却低回报,那就多多担待了