首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >建立一对一的关系

建立一对一的关系
EN

Stack Overflow用户
提问于 2011-04-20 00:52:56
回答 3查看 376关注 0票数 0

我有两个物体,一个是印刷机,另一个是缝纫:

代码语言:javascript
复制
Press
------------------
PressID
Name

Stitching
------------------
StitchingID
Name
Cost

因此,在我的网站上,当用户创建一个新闻媒体,他们可以选择创建一个缝纫为该印刷机。印刷机不需要缝纫。

我使用的是实体框架4,如果我从数据库中获得一个Press对象,我希望能够说:

代码语言:javascript
复制
Press p = getPressFromDB(pressId);
if (p.Stitching != null)
{
    float cost = p.Stitching.Cost;
}

我也希望能够:

代码语言:javascript
复制
Stitching s = getStitchingFromDB(stitchingId);
Press p = s.Press;

如何在这两个表之间建立一对一的关系?

编辑:

我在另一个论坛上听取了一个用户的建议,并运行了这个脚本,以便在两者之间建立关系,并防止拼接与多个页面关联:

代码语言:javascript
复制
CREATE TABLE PressStitching (PressID int NOT NULL PRIMARY KEY, StitchingID int NOT NULL,
CONSTRAINT FK_PressStitching_Press FOREIGN KEY(PressID) REFERENCES Press(PressID),
CONSTRAINT FK_PressStitching_Stitching FOREIGN KEY(StitchingID) REFERENCES Stitching(StitchingID),
CONSTRAINT UNQ_Stitching UNIQUE(StitchingID))

但是当我更新我的.edmx文件时,我仍然有一对多的关系。一个出版社有一个拼接,但是一个缝纫有多个新闻实体。我更新了.edmx设计器中的关系,这样出版社就有零或-一个缝纫,而缝纫有一个设备。但我不知道这是否足够。这里有什么建议吗?

EN

回答 3

Stack Overflow用户

发布于 2011-04-20 01:05:58

如果出版社和缝纫之间的关系是一对一的,而且没有理由在一个单独的表中进行缝纫(也就是说,缝纫只与Press相关联,而没有其他类),那么最好将缝纫属性移到Press中。

代码语言:javascript
复制
PressID
Name 
StitchingName
StitchingCost

这使得您的模型设计更加简单,您的数据库也得到了正确的标准化。

在.net中,我将使StitchingCost和nullable类型。即。float? StitchingCost;

这将允许您检查是否增加了缝纫细节。

示例:

代码语言:javascript
复制
Press p = getPressFromDB(pressId);
if (p.StitchingCost.HasValue)
{
    float cost = p.StitchingCost.Value
}
票数 0
EN

Stack Overflow用户

发布于 2011-04-20 06:19:01

我认为StitchingID应该是Primary Key,也是Foreign Key to PressID

票数 0
EN

Stack Overflow用户

发布于 2011-05-13 19:28:40

我不明白你为什么想要一个StichingID,除非Stichings可以与印刷机以外的东西相关联。如果这是你所说的,而且每台压力机都可以有一个或零的针线,那么缝纫表就应该充当一个垫子的附加表。而不是使用StichingID,而是在Stiching表中使用主键be PressID。因此,1:0-1关系是直接执行的。我认为实体框架应该不难认识到这一点。

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

https://stackoverflow.com/questions/5724434

复制
相关文章

相似问题

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