繁体   English   中英

表中的数据不一致

[英]Inconsistent data in table

我工作的一位合作伙伴使用以下字段创建了客户表:

first_name,middle_name,last_name,second_last_name,full_name

其中full_name是其他字段的串联。

你能给我最好的解释为什么是不好的做法吗?

这是不理想的,因为某人或某事迟早会更新last_namefirst_name而不更新full_name ,反之亦然,并且您的数据库中将出现以下内容:

first_name   last_name   full_name
John         White       John Black

然后,您尝试找出差异的出处,以及该人的姓氏实际上应该是什么,这很有趣。 如果要像这样对表进行非规范化 ,则应该有一些令人信服的理由。 您的伴侣希望full_name成为单独字段的理由是什么?

您可能应该研究替代方案。 例如,您可以定义一个视图 ,该视图从表中返回各种名称组件,并将它们组装成full_name 根据您的RDBMS,您可能还有其他选择。 例如,在SQL Server中,您可以将计算列直接放在表中。

declare @customer table (first_name varchar(50), last_name varchar(50), full_name as first_name + ' ' + last_name);
insert @customer values ('John', 'B');
select * from @customer;

结果:

first_name   last_name   full_name
John         B           John B

如果将full_name保留在存储中,那么您的数据将增加一倍:您浪费了两倍的存储空间,没有任何好处,并且在编辑或其他维护上没有额外的开销。

如果full_name列实际上是一个函数(例如,它是根据该行的其他元素计算得出的),则解决方案很好!

根据您使用的数据库引擎的不同,这些计算列只能被读取(您必须更新其他列以更改其结果),甚至是可读写的。 写入此列是由另一个函数处理的,例如,它可以解析全名并将部分存储在要更新的行中。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM