创建数据库时 - 是否建议为我可以根据其他字段计算的数据创建一个列?

When creating a database - Is it advisable to create a column for data I can calculate based on other fields?

我正在为律师构建一个应用程序,他可以在其中创建客户组合。在这个作品集中,有作品集的ID,创建日期,委托人姓名,电话等

除了所有这些字段之外,还有另一个字段:"portfolio name"。该字段以格式化文本的形式包含来自其他字段的有关客户端的一些信息。

因此,例如,如果:

  1. ID = 271
  2. client_name = "李四"
  3. creation_date = 18/02/2016

portfolio_name 将是 271/John Doe/18022016

现在,由于portifolio_name并不是真正包含新数据,而只是来自其他字段的格式化数据,它是否真的存在于数据库中table 作为专栏? 是否存在数据重复

这取决于 table 的大小以及您查询 table 的方式。

如果 table 很大,您可以为计算字段创建一个列。方便查询。

如果table小可以在查询中计算

大多数数据库引擎都允许您为此目的创建计算列。根据引擎和您设置计算列的方式,它可能会或可能不会保存到磁盘,但将保证它始终是最新的。好处是您可以将其视为只读列。

https://technet.microsoft.com/en-us/library/ms191250%28v=sql.105%29.aspx

这是违反 1NF 的教科书,通常应避免。在某些情况下这是可以接受的——例如,计算值很难获得或非常耗时。但是,由于字符串连接非常简单(您甚至可以在查询中直接进行连接,而无需定义任何伪字段)我永远不会推荐这样做,除非该字段仅包含一个初始默认值并且客户端具有稍后自定义它的能力。否则,它最终变得不一致。例如,当客户的名字改变时会发生什么?