Sql 数据库中的继承?

Sql 数据库中的继承?,sql,database,inheritance,sql-server-2005,Sql,Database,Inheritance,Sql Server 2005,是否有任何方法可以在数据库中使用继承(特别是在SQLServer2005中) 假设我有几个字段,如CreatedOn,CreatedBy,我想在所有实体上添加这些字段。我正在寻找一种替代方法,而不是将这些字段添加到每个表中。您可以在Management Studio的模板窗格中创建模板。然后每次创建新表时都使用该模板 否则,可以将CreatedOn和CreatedBy字段存储在引用原始表和id的审核跟踪表中 否则,请手动执行。PostgreSQL具有此功能。只需将以下内容添加到表定义的末尾: I

是否有任何方法可以在数据库中使用继承(特别是在SQLServer2005中)


假设我有几个字段,如CreatedOnCreatedBy,我想在所有实体上添加这些字段。我正在寻找一种替代方法,而不是将这些字段添加到每个表中。

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

否则,可以将CreatedOn和CreatedBy字段存储在引用原始表和id的审核跟踪表中


否则,请手动执行。

PostgreSQL具有此功能。只需将以下内容添加到表定义的末尾:

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


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

SQL Server 2005中没有表之间的继承,正如其他人所指出的,您可以在创建表时获得帮助,向表中添加必要的列,但这不是您所知道的继承

把它想象成源代码文件的模板

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


底线:手工工作。

您可以使用数据建模工具,如ER/Studio或ERWin。这两种工具都有域列,您可以在其中定义可以应用于任何表的列模板。当域更改时,关联列也会更改。ER/Studio还有触发器模板,您可以构建并应用于任何表。这就是我们如何更新LastUpdatedBy和LastUpdateDate列,而不必构建和维护数百个触发器脚本

如果确实创建了审核表,则使用该审核表的每个表中的每一行都会有一行。那可能会弄得一团糟。在我看来,最好不要在每个表中都添加审计列。您还可能希望在所有表中放置一个timestamp列。您永远不知道并发何时会成为问题。我们放在每个表中的DB审计列是:CreatedDt、LastUpdatedBy、LastUpdatedDt和Timestamp


希望这能有所帮助。

我们有一个存储过程,它向给定的表中添加审计列,并(可选)创建一个历史记录表和相关触发器来跟踪对值的更改。不幸的是,公司政策意味着我不能共享,但这确实不难实现。

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

您不想使用继承来完成此操作!当表B、C和D从表A继承时,这意味着查询表A将给出B、C和D的记录。现在考虑……/P> 从文件中删除

使用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)
)

子对象与对象具有外键关系。创建子对象行时,必须首先创建一个对象行,并在两行中使用Id

尽量不要引用其他帖子,因为它们由于投票而出现问题。我认为您的问题应该更恰当地表述为“在数据库中处理审核的推荐方法是什么?”如果这是唯一目的,我同意。但是db iheritance问题是一个很好的答案:我以为问题说的是“特别是在SQL Server 2005中”?模板不是继承的如果您只有GUID,您如何知道它来自哪个表?