2012-12-04 87 views
1

我的问题涉及到这样一个问题:Entity Framework One-To-One Mapping Issues挑战,加入1-1关系表(用户和UserSettings)

我已经有一堆记录的用户表。

Users (Id, UserName, Password, FullName, Gender) 

我需要添加一堆通知选项为每个用户:

NotifyForNewComment 
NotifyForNewPost 
NotifyWhenFriendSignsUp 

我可能要在以后添加更多的选择,但总是会有一个1-1的关系,所以我的问题是将它们存储在单独的表格中,比如UserSettings,还是将它们作为列添加到Users表中。

在上面的链接问题中,建议是创建一个新表并将UserSettings表中的UserId作为主键(因为否则实体框架不喜欢它)。如果这是我必须做的,那么我有几个问题:

  1. 我所有的表都有一个Id列。 UserSettings将不会有Id列,因为UserId将是主键?

  2. 我不得不打开UserSettings表的Identity插入,这样当我插入一个新的用户记录时,我也可以用UserId插入一个UserSettings记录?

  3. 鉴于我已经在Users表中有一堆记录,如果现在要引入与User表有1-1关系的新UserSettings表,我该怎么办?我是否只运行一个脚本来为Users表中的每个用户添加记录并添加一些默认值?或者我把它变成0-1的关系?

  4. 由于它是1-1关系,我不应该担心一个新表,而是只需将它们添加为现有Users表中的列?

+0

您可以将所有通知列作为布尔值添加到用户表中,只需将活动的列切换为true? –

+0

这对我来说是最简单的,但我只是想知道这是否是好的数据库设计... – Prabhu

+1

是的,它是很好的数据库设计。简单明了都很好。困惑和困难是不好的。非常少见需要1对1表关系。 –

回答

1

我想你错过了UserSettings表的要点。它必须像列:

  • UserSettingsId
  • 用户ID
  • 通知

它可能还包含的东西创建通知时一样,无论是当前已启用,以及其他信息。

如果您确切知道通知是什么,并且它们不会更改,那么您可以考虑将它们作为用户表中的单独列添加。

另一方面,这是一种自然的1-N关系,你应该这样做。