关于sqlserver数据库设计表问题
现在有三种类型的数据
一:
属性 - 值
二:
切换器名称 - 入口 - 出口
三:
主机名 - 主机IP - 用户名 - 密码
现在我想将这些数据存放到一张表里面,按正常的思路来说,要在一张表里面存放这些字段,则需要创建9列:
属性 值 切换器名称 入口 出口 主机名 主机IP 用户名 密码
以上9列。
然后在将数据存进表里面的时候,会出现这样的情况
属性 值 切换器名称 入口 出口 主机名 主机IP 用户名 密码
--------------------------------------------------------
属性 值 NULL NULL NULL NULL NULL NULL NULL
NULL NULL 切换器名称 入口 出口 NULL NULL NULL NULL
NULL NULL NULL NULL NULL 主机名称 主机IP 用户名 密码
也就是说,每一行数据中只有对应的类型有值,而且他列都为NULL,这样看起来总是感觉不舒服,所以想找一个更好的设计方法,表最好不要超过2张,1张那就是完美。 sqlserver 设计 数据表 数据库
[解决办法]
你要一张表的话就直接属性 值 切换器名称 入口 出口 主机名 主机IP 用户名 密码这样存咯,不过冗余大。
[解决办法]
从数据看不出三类数据有什么关联
[解决办法]
数据没有任何关联关系吗?
[解决办法]
如果数据没有任何关系,还是分开存储更好。否则定会出现数据NULL的字段。
[解决办法]
光存的话,其实无所谓,关键是看你要怎么用!
用法决定存法!
[解决办法]
这样虽然有冗余信息,但是业务上就简单了。
建议你在加一个类型字段type_id,就是表示你存储的是那种类型的信息,比如:
属性 ,值 = 1
切换器名称 , 入口 , 出口 =2
主机名 ,主机IP ,用户名 ,密码=3
这样查询的时候,你要查属性 ,值,那么就是:
select 属性 ,值 from tb where type_id = 1
就可以了,非常方便
[解决办法]
两张表:
1. 属性做为一个基本表(属性ID,属性值)
2. 数据表:属性ID, 切换器名称,入口,出口,主机名,主机IP ,用户名, 密码
还有,不知道你的入口和出口是否同时有,不是同时有的话,可以放在属性表里面。
[解决办法]
我也试了,如果把数据拆分成列,那么到时候,比如:属性-值,拆分成2行数据,一行存属性,一行存列,
这样看上去倒是好一点,
但是在查询的时候,还是得行转列,比较麻烦。
其实设计表,就是得考虑:性能,业务,占用存储,开发速度。
我原来的公司,需要非常快的开发速度,于是,就把不同业务的数据,放到一个表中,通过增加一个func_code字段,来区分是不同功能产生的,然后后面是一堆字段,A业务用xx字段,B业务用yy字段,其他都是空着的,这样的话,非常方便开发,在理解业务的时候,也很容易,不同业务,用不同的字段。
但是,如果你不懂业务,就会很迷惑,看不懂,怎么一眼看过去,一堆没用的字段放在那儿,全是null。
也想过拆分,但是这样也麻烦,就是刚才说的,开发的难度就上去了,而且性能也不会太好,因为你得做动态的行转列,每个业务用到的字段个数,和字段名称,都不完全一样,这可非常的麻烦。
所以,你一开始想的还是对的,这种表的设计,虽然看着,有很多null值,但是开发上就比较容易,性能也不错。