我有一个应用程序,其中有一个名为Hull的通用对象(表)。表中的每个船体都是独一无二的。
实体关系多个1:1的
我有另一个对象有三个外壳,但他们具体是Port_Hull,Center_Hull和Starboard_Hull。
与其创建一对多关系,我试图为每个关系创建一对一的关系,但这会导致很多错误,除非我将关系从Hull传递到Vessel一对多(它不是)。任何想法我是如何去做的,还是应该抛弃这个概念,让它成为一对多的关系,并处理总是有三个条目的列表?
p.s.使用uniqueidentifiers,因为许多用户可以在断开连接时添加记录。
赫尔表
- HullID唯一标识符(主键)
- 加上一束船体数据字段的
船只表
- VesselID唯一标识符(主键)
- MainHullID uniqueidentifier(试图为重点和非重点)
- PortHullID唯一标识符
- StarboardHullID唯一标识符
- 加上一堆容器数据字段
问题与方法一(我认为),并不是每艘船都有三个船体(我简化了我原来的文章)。
有些船只是单体船,只有Mainhull,有些船只是双体船,有PortHull和StarboardHull。
我想知道是否对于船体表我应该使主键的VesselID字段加1个船体字符字段(M,P&S),使两个表之间的关系与一个外键索引VesselID,然后处理编码中的关系? – Evan 2010-05-17 00:04:35
我会在船体上保留一个代理HullID - 你不想要复合PK - 在后面真正的痛苦。相反,在VesselID和M,P,S char字段上创建一个唯一的约束 - 我在我的答案中称为HullType。这样,你可以确保一艘船最多只有一个给定类型的船体。现在,对给定类型的船体进行天气测试对于给定容器是有意义的,这是另一个问题,您可以在代码中简单解析(可能在db模型中,但是很复杂)。您有一个复杂的域模型,您正在映射到数据库 - 你有没有考虑过使用对象关系映射工具,例如NHibernate的? – mdma 2010-05-17 00:20:40
大声笑 - 我试图使用VisualStudio实体框架工具,如果它只是退出给我奇怪的错误和识别东西线枚举。 NHibernate为.net添加功能的标准框架? – Evan 2010-05-17 00:40:39