我有这样的场景:表T中有PK、A、B、C、D列
表T( PK、A、B、C、D)
我必须插入不同来源的数据,如A、B、C、D列分别计算。它们都是初级PK。
我想问一下,是否最好为每一列创建indivdiaul表,然后使用PK将它们连接起来,然后插入最终的表T中
pk
或
更新ie是可以的
首先有一些像T (PK,A,B,C,D)数据,比如(1,a1,NULL,NULL,NULL)
对所有列B、C、D依次运行update语句,并获取所有数据
T(1,a1,b1,c1,d1)
发布于 2014-01-23 05:44:31
我不确定这些都是很好的选择。以下是我的想法:
pk
在这种情况下,您有多余的数据。除非您的单个PK表只是暂存表,否则我认为这里可能会遇到一些严重的问题,特别是在不同的使用者从不同的表中提取数据的情况下。我不会用这个设计来碰碰运气。
更不用说,如果PK:A
、PK:B
、PK:C
和PK:D
都是1:1
关系,那么我也看不到任何正常化的好处。
T (PK,A,B,C,D)数据--类似于(1,a1,NULL,NULL,NULL) --对所有列B,C,D依次运行update语句,并得到所有数据T(1,a1,b1,c1,d1)
我也不确定我喜欢这个设计,虽然我会把它放在比前者更高的偏好上。这背后的原因是,如果业务指定A
、B
、C
和/或D
列实际上不是NULLable,会发生什么情况。现在,您可能会遇到一个数据与业务约束冲突的大问题。
我认为这里真正的解决方案可能是后退一步,分析您的数据修改。与基于步骤的数据插入不同,是否没有办法将所有必需的数据插入到此表中?在应用程序中,在每个项插入之前检索所有必需的数据。这样,您就不会违抗任何业务规则、冗余数据或以上设计的额外操作开销。
换句话说,如果数据列A
、B
和C
是必需的,那么在得到数据之前,不应该将数据推送到这个表中。如果没有所有这些所需的列,您就不会有符合要求的数据,而且它不应该存在于该表中,除非是这样。如果D
是可空的和可选的数据,那么如果它在以后使用不同的DML操作时才会出现,那就可以了。
https://dba.stackexchange.com/questions/57367
复制