我正在实施一个数据库设计,有一个车辆表,车辆发动机和车辆齿轮表与SQL 2005。
每个表都有一个ID,它是一个SQL标识号,每个引擎和齿轮都与车辆ID有关系,所以在创建车辆之前,我必须创建一个引擎和齿轮。
在创建发动机和齿轮时,我如何知道车辆识别号?由于引擎和齿轮表的外键约束,是否尚未创建vehicle行?
我是否应该实现一个自动触发器,在创建车辆时为链接到车辆的发动机和齿轮创建一个空行?但是,我怎么知道车辆ID呢?
发布于 2008-12-11 10:09:28
无论哪种情况,都不需要在没有数据的任何表中创建行。例如,有一个与车辆不匹配的发动机排是很好的。您可以在找到时添加缺少的内容。
我想我明白这个设计了。每辆车可以有一个发动机和一个变速器。但你可以在找到车辆之前记录下变速器或发动机。
它们实际上是独立的实体,所以要像对待它们一样对待它们。你可能很容易得到发动机和变速器,你永远不会匹配到一辆汽车。
另一个更有趣的问题是,你最终是否会得到一个与发动机匹配的变速器,但没有车辆。人们经常看到发动机和电车栓在一起,看不到任何车辆。它们通常也会一起出售。
实际上,您可以想象这三个实体中的任何一个单独存在,或者与其他一个或两个实体匹配。
触发器在这里没有作用。如果使用触发器,触发器应该被限制为关于模式结构的细粒度引用完整性规则-而不是像这样的业务规则。没有强制约束--每个外键都是可选的(可以为空)。有几种不同的方法可以设置FK字段。
发布于 2008-12-11 09:55:54
您确定您的表设计正确吗?我真的不明白你们的实体之间有什么样的关系。例如:您是否正在尝试在车辆和发动机之间创建一对多或多对一关系?
一种选择是(如果它满足您的需求):
车辆:(ID,EngineID,GearID,...)
引擎(ID,其他引擎数据)
齿轮(ID,其他齿轮数据)
发布于 2008-12-11 10:38:36
表之间存在外键关系这一事实并不意味着必须以特定顺序创建数据。通常,人们希望首先创建车辆记录,然后将发动机和齿轮分配给它,但事实并非如此。
如果在您的方案中,可以在将发动机或齿轮分配给车辆之前将其记录在数据库中,则需要使引用车辆ID的FK列允许为空。一旦创建了车辆行,就可以将这些链接到车辆id。
或者,您可以创建车辆记录,然后在创建发动机和齿轮记录时将其分配给它。
https://stackoverflow.com/questions/358760
复制相似问题