繁体   English   中英

在数据库中继承?

Inheritance in database?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

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

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

9 个回复

在SQL Server 2005中没有表之间的继承,并且正如其他人所指出的那样,您可以获得在创建表时向表中添加必要列的帮助,但它不会像您一样继承知道。

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

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

底线:手工作业。

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

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

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

据我所知,它不是经常使用的功能。

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

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

如果不这样做,您可以将CreatedOn和CreatedBy字段存储在引用原始表和id的Audit跟踪表中。

如果做不到这一点,请手动完成。

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

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

希望这可以帮助。

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

你不想使用继承来做到这一点! 当表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 - 我会在我的ER模型中使用超类型和子类型关系来实现它。 您也可以使用一些不同的物理选项来实现这些关系。

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

例如

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具有外键关系。 在创建SubObject行时,必须首先创建一个Object行并在两行中​​使用Id

1 在数据库或Java类中继承?

我有以下问题。 我将员工,机器和设备分配到工作地点。 工作地点具有当前和过期的分配。 当前分配具有相同的属性。 但是,稍后可以确定每种类型的当前分配和过期分配。 现在,我不确定如何以及在哪里最好地解决此问题。 我使用Hibernate和PostgreSQL数据库。 我要在 ...

2 在文档数据库中继承?

我想知道因为我搜索了pdf“[noSql]权威指南”和“开始[noSql]”的​​单词“继承”但我没有找到任何东西? 我错过了什么吗? 因为我正在使用hibernate和mysql进行tablePerHierarchy继承,在[noSql]中出于某种原因这是否已被弃用? (用你喜欢的“ ...

4 使用Oracle数据库在Sql中继承

我可以在一个以上的表中使用一个已定义的主键吗?例如,我有一个具有Item_ID的Item Table,但我也想将此ID写在Vehicle和Piece表中作为主键,这可能吗?依次组成基本表和子表。车辆具有自己的属性。 ...

5 在PHP OOP中继承数据库连接

我的抽象类数据库是数据库交互和这个类的任何子女作出(UserDatabase,ActionDatabase,EventDatabase)继承其定义为静态的数据库连接 。 这是否意味着我的数据库连接仅建立一次并存储在内存中,然后传递给子类作为引用,而不为每个实例复制? 这是实现OOP ...

6 在数据库中建模继承

对于数据库分配,我必须为学校建模系统。 部分要求是为员工,学生和家长建模信息。 在UML类图中,我将其建模为这三个类是人类型的子类型。 这是因为他们都需要有关地址数据等信息。 我的问题是:我如何在数据库(mysql)中对此进行建模? 到目前为止的想法如下: 创建一 ...

7 在数据库中模拟继承

我正在使用Sql Server 2012在数据库上工作。在我们的数据模型中,我们有一个User类型,具有基本的登录信息,名称,地址等,其中一些用户是Technician ,他们具有相同的属性作为User ,但其他一些属性如Route , Ship To Location等。 我的问题是,在 ...

8 在数据库中存储继承的对象

我试图找出将对象模型中的继承关系映射到关系数据库的最佳方法。 例如,考虑以下类结构。 以下是我正在考虑如何将此结构保存到数据库的一些选项。 选项1:所有项目类型的单表 这很糟糕,因为它需要NULL值。 选项2:每种项目类型的单独表格 这样更好,但列出所有项目 ...

9 如何在数据库中表示继承?

我正在考虑如何在 SQL Server 数据库中表示复杂的结构。 考虑一个需要存储一系列对象的详细信息的应用程序,这些对象共享一些属性,但还有许多不常见的属性。 例如,商业保险套餐可能在同一保单记录中包括责任、汽车、财产和赔偿保险。 在 C# 等中实现这一点是微不足道的,因为您可以创建一个包含部 ...

暂无
暂无

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

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