我正在设计一个关于机械设备运行的统计数据库.每批数据将包含数百个统计信息,因此我尝试决定是创建包含数百列的单个表还是将其拆分为多个表,每个表包含相关的统计信息.例如,我可以有一个表包含与故障相关的统计信息,另一个表包含与卡纸相关的统计信息等.
使用多个表会使整个系统变得更加复杂,但从概念上讲,我可能更容易处理几个较小的表而不是一个较大的表.
将事情分开会有任何性能上的好处吗?看起来查询带有几十列的表可能比查询具有数百列的表更快.
有没有人有这种经历的经验?我正在使用Oracle进行这个项目,虽然这是我将来可能遇到的数据库,所以任何数据库的答案都会受到赞赏.
我想我们需要更多地了解您的设计才能正确回答.例如,我很好奇可能会有很多与故障相关的列,与堵塞有关的许多(不同的)等等(不管堵塞只是一种故障吗?)
你的设计是否正常化了?大概你没有"jam1","jam2"等栏目?!
假设设计是好的并且标准化,关于是否有一个宽表或许多较窄表的决定是各种因素之间的权衡:
所有/大多数记录都有所有类型的统计数据吗?是=>一张桌子,没有=>很多
您经常需要一起查询所有类型的统计数据吗?是=>一张桌子,没有=>很多
你是否在同一个屏幕上保存了所有不同的统计数据?是=>一张桌子,没有=>很多
您是否可能达到任何数据库限制,例如每个表最多1000列?
无论您采用哪种方式,您都可以使用视图来呈现替代结构,以方便开发人员:
一个表:许多视图选择特定类型的统计数据
许多表:将所有表连接在一起的视图
根据您的评论,我现在知道您在机器上的40个不同位置有卡纸计数,而其他类型的统计数据是类似性质的计数.这表明下表设计:
create table machines (machine_id ... primary key, ...); create table machine_stats ( machine_id references machines , stat_group -- 'jams', 'malfunctions' etc. , stat_name -- 'under the hood', 'behind the door' etc. , stat_count );
正如下面有人评论的那样,这些允许您更轻松地对统计数据进行求和 - 在统计类型内或跨统计类型.如果需要将新统计数据添加到统计类型,也可以轻松扩展.