有没有办法在数据库中使用继承(特别是在 SQL Server 2005 中)?

假设我有很少的领域 创建于, 由...制作 我想将其添加到我的所有实体中。我正在寻找一种替代方法,而不是将这些字段添加到每个表中。

有帮助吗?

解决方案

SQL Server 2005 中的表之间不存在继承之类的东西,正如其他人所指出的,您可以在创建表时获得帮助,将必要的列添加到表中,但它不会像您那样继承知道。

可以将其视为源代码文件的模板。

正如 GateKiller 提到的,您可以创建一个包含共享数据的表并使用外键引用它,但您要么必须拥有审核挂钩、触发器,要么手动进行更新。

底线:体力劳动。

其他提示

PostgreSQL有这个功能。只需将其添加到表定义的末尾:

INHERITS FROM (tablename[, othertable...])

子表将拥有其父表的所有列,对父表的更改将更改子表。此外,子表中的所有内容都将出现在对父表的查询中(默认情况下)。不幸的是,索引不会跨越父/子边界,这也意味着您无法确保某些列在父和子中都是唯一的。

据我所知,这不是一个经常使用的功能。

您可以在 Management Studio 的模板窗格中创建模板。然后每次要创建新表时都使用该模板。

如果失败,您可以将 CreatedOn 和 CreatedBy 字段存储在引用原始表和 ID 的审核跟踪表中。

如果失败,请手动执行。

您可以使用数据建模工具,例如 ER/Studio 或 ERWin。这两个工具都有域列,您可以在其中定义可应用于任何表的列模板。当域发生变化时,相关列也会发生变化。ER/Studio 还具有可以构建并应用于任何表的触发器模板。这就是我们更新 LastUpdatedBy 和 LastUpdatedDate 列的方式,而无需构建和维护数百个触发器脚本。

如果您确实创建了审核表,则使用该审核表的每个表中的每一行都会有一行。这可能会变得混乱。在我看来,最好将审计列放在每个表中。您可能还想在所有表中放置时间戳列。你永远不知道并发何时会成为问题。我们在每个表中放置的数据库审计列是:CreatedDt、LastUpdatedBy、LastUpdatedDt 和时间戳。

希望这可以帮助。

我们有一个 SPproc,它将审计列添加到给定的表中,并(可选)创建一个历史表和关联的触发器来跟踪值的更改。不幸的是,公司政策意味着我不能分享,但这确实不难实现。

如果您使用 GUID,则可以创建一个包含 GUID、CreatedOn、CreatedBy 列的 CreateHistory 表。为了填充表,您仍然必须为每个表创建一个触发器或在应用程序逻辑中处理它。

您不想使用继承来做到这一点!当B、C、D表继承自A表时,意味着查询A表将得到B、C、D的记录。现在考虑...

删除自;

使用 LIKE 代替继承...

CREATE TABLE blah (
    blah_id     serial       PRIMARY KEY
    , something text         NOT NULL
    , LIKE template_table    INCLUDING DEFALUTS
);

Ramesh - 我将在我的 E-R 模型中使用超类型和子类型关系来实现这一点。您还可以通过几种不同的物理选项来实现这种关系。

在 O-R 映射中,继承映射到父表,其中父表和子表使用相同的标识符

例如

create table Object (
    Id int NOT NULL --primary key, auto-increment
    Name varchar(32)
)
create table SubObject (
    Id int NOT NULL  --primary key and also foreign key to Object
    Description varchar(32)
)

SubObject 与 Object 具有外键关系。当您创建子对象行时,必须首先创建对象行并在两行中​​使用 Id

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top