首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在使用外键向数据库添加新项时,是否应该使用SQL触发器在其他表中创建相关行?

在使用外键向数据库添加新项时,是否应该使用SQL触发器在其他表中创建相关行?
EN

Stack Overflow用户
提问于 2008-12-11 09:19:55
回答 10查看 1K关注 0票数 2

我正在实施一个数据库设计,有一个车辆表,车辆发动机和车辆齿轮表与SQL 2005。

每个表都有一个ID,它是一个SQL标识号,每个引擎和齿轮都与车辆ID有关系,所以在创建车辆之前,我必须创建一个引擎和齿轮。

在创建发动机和齿轮时,我如何知道车辆识别号?由于引擎和齿轮表的外键约束,是否尚未创建vehicle行?

我是否应该实现一个自动触发器,在创建车辆时为链接到车辆的发动机和齿轮创建一个空行?但是,我怎么知道车辆ID呢?

EN

回答 10

Stack Overflow用户

发布于 2008-12-11 10:09:28

无论哪种情况,都不需要在没有数据的任何表中创建行。例如,有一个与车辆不匹配的发动机排是很好的。您可以在找到时添加缺少的内容。

我想我明白这个设计了。每辆车可以有一个发动机和一个变速器。但你可以在找到车辆之前记录下变速器或发动机。

它们实际上是独立的实体,所以要像对待它们一样对待它们。你可能很容易得到发动机和变速器,你永远不会匹配到一辆汽车。

另一个更有趣的问题是,你最终是否会得到一个与发动机匹配的变速器,但没有车辆。人们经常看到发动机和电车栓在一起,看不到任何车辆。它们通常也会一起出售。

实际上,您可以想象这三个实体中的任何一个单独存在,或者与其他一个或两个实体匹配。

触发器在这里没有作用。如果使用触发器,触发器应该被限制为关于模式结构的细粒度引用完整性规则-而不是像这样的业务规则。没有强制约束--每个外键都是可选的(可以为空)。有几种不同的方法可以设置FK字段。

票数 4
EN

Stack Overflow用户

发布于 2008-12-11 09:55:54

您确定您的表设计正确吗?我真的不明白你们的实体之间有什么样的关系。例如:您是否正在尝试在车辆和发动机之间创建一对多或多对一关系?

一种选择是(如果它满足您的需求):

车辆:(ID,EngineID,GearID,...)

引擎(ID,其他引擎数据)

齿轮(ID,其他齿轮数据)

票数 1
EN

Stack Overflow用户

发布于 2008-12-11 10:38:36

表之间存在外键关系这一事实并不意味着必须以特定顺序创建数据。通常,人们希望首先创建车辆记录,然后将发动机和齿轮分配给它,但事实并非如此。

如果在您的方案中,可以在将发动机或齿轮分配给车辆之前将其记录在数据库中,则需要使引用车辆ID的FK列允许为空。一旦创建了车辆行,就可以将这些链接到车辆id。

或者,您可以创建车辆记录,然后在创建发动机和齿轮记录时将其分配给它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/358760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档