【问题标题】:Indicate that a table's attribute is derived in SQL表示表的属性是在 SQL 中派生的
【发布时间】:2016-06-14 06:38:57
【问题描述】:

在 SQL 中有没有办法指定一个属性是派生的?目前,我正在创建一个表Employee,它有一个派生属性age,但我不知道如何表示它(恐怕没有办法这样做):

create table Employee(
    Id int NOT NULL UNIQUE PRIMARY KEY AUTO_INCREMENT,
    Age int,  # How to indicate this is a derived attribute?
    Country varchar(255),
    City varchar(255),
    Birthrate double,
);

【问题讨论】:

  • 您的意思是如何在 ERD 上指出 Age 是计算列,还是您需要根据 SYSDATE 和 Birthdate 计算 Age 的代码?
  • @lad2025 其实,现在我只需要编写 SQL 代码。我认为 SQL 中有一种方法可以指定必须派生一个属性,或者类似的东西......
  • 你使用 MySQL/Oracle/SQL Server 吗?
  • @lad2025 关于陈对 ER 图的表示法,我已经知道虚线椭圆表示派生属性这一事实,但无论如何感谢!
  • @Chuck Trigger 是不好的解决方案,你会每年更新吗?更好的选择是查看或计算/生成的列。

标签: sql database er-diagrams


【解决方案1】:

如果您的意思是age 派生自birthrate,我认为您应该考虑您的表中是否真的需要age 列。如果您不在这里创建数据仓库,那么每次计算年龄将比在生产中维护此列更明智...想想看 - 每次有人过生日时都应该重新计算此列!

为方便起见,您可以随时为其创建视图,如下所示:

CREATE VIEW Employee_view AS 
  SELECT 
    e.Id,
    =>here some database specyfic calculation to calculate age<= as Age,
    e.Country,
    e.City,
    e.Birthrate
 FROM Employee e;

【讨论】:

  • 我同意——将计算列放在表中而不是视图中是一个非常糟糕的主意。如果你把它放在一个列中,你就有一个每天更新它们的过程。如果有人填写表格,您可以有一个“age_reported”列。我见过这个用了很多。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-02-10
  • 1970-01-01
  • 2016-01-09
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
相关资源
最近更新 更多