我有一个应用程序,我有一个名为Hull的通用对象(表)。表中的每个船体都是独一无二的。
我有另一个有三个外壳的对象,但它们特别是Port_Hull,Center_Hull和Starboard_Hull。
我没有创建一对多的关系,而是试图为每一个建立一对一的关系,但这导致了许多错误,除非我从Hull到Vessel的关系从一个到多个(它不是) 。我知道如何解决这个问题,或者我应该放弃这个概念并让船只与一对多的船体关系并处理总是有三个条目的清单?
P.S。使用uniqueidentifiers可以在断开连接时添加记录。
船体表
船只表
答案 0 :(得分:0)
您在询问是否可以创建此内容或是否应该创建此内容?
首先,有可能:
Create Table Vessel
(
VesselId uniqueidentifier not null primary key
, MainHullId uniqueidentifier not null
, PortHullId uniqueidentifier not null
, StarboardHullId uniqueidentifier not null
, ...
, Constraint FK_Vessel_Hull_Main
Foreign Key ( MainHullId )
References Hull( HullId )
, Constraint FK_Vessel_Hull_Port
Foreign Key ( PortHullId )
References Hull( HullId )
, Constraint FK_Vessel_Hull_Startboard
Foreign Key ( StarboardHullId )
References Hull( HullId )
, Constraint UC_Vessal_MainHullId Unique ( MainHullId )
, Constraint UC_Vessal_PortHullId Unique ( PortHullId )
, Constraint UC_Vessal_StarboardHullId Unique ( StarboardHullId )
)
如果您的子表具有父表的外键并且外键必须是唯一的,则会创建1:1关系。
现在,关于它是否是一个好的设计,这将取决于问题域。有一个基于左,右和中心的三个不同船体的vessal似乎很奇怪,但也许我错过了一些东西。
答案 1 :(得分:0)
您可以通过两种不同的方式解决这个问题:
我会选择第一个。因为选择船只然后找到相关的船体似乎更自然,并且还确保每艘船都需要3个船体(在MainHull,PortHull,StarboardHull上确定非零约束。)
编辑:看到你的评论,鉴于船只不需要3个船体,那么第二个解决方案也值得考虑。如果您需要添加其他类型的外壳,则可以在不更改架构的情况下执行此操作,因为外壳类型不是从引用的字段推断出来的,而是在建议的“HullType”字段中明确命名。