【问题标题】:Challenges with adding a 1-1 relational table (Users and UserSettings)添加 1-1 关系表的挑战(用户和用户设置)
【发布时间】:2012-12-04 18:00:52
【问题描述】:

我的问题与这个问题有关:Entity Framework One-To-One Mapping Issues

我有一个用户表,其中已经有一堆记录。

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

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

NotifyForNewComment
NotifyForNewPost
NotifyWhenFriendSignsUp

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

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

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

  2. 我必须为 UserSettings 表打开 Identity Insert,这样当我插入新的用户记录时,我还可以插入带有 UserId 的 UserSettings 记录?

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

  4. 既然是 1-1 关系,我是否应该不用担心新表,而只需将它们作为列添加到现有用户表中?

【问题讨论】:

  • 您能否将所有通知列作为布尔值添加到用户表中,然后将活动列切换为 true?
  • 这对我来说是最简单的,但我只是想知道这是否是好的数据库设计......
  • 是的,这是很好的数据库设计。简单明了是好的。复杂和困难是不好的。很少需要一对一的表关系。

标签: asp.net .net sql sql-server entity-framework


【解决方案1】:

我认为您错过了 UserSettings 表的要点。它会有如下列:

  • 用户设置 ID
  • 用户ID
  • 通知

它还可能包含通知的创建时间、当前是否启用以及其他信息。

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

另一方面,这是一个自然的 1-N 关系,您可能应该这样实现它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-10-24
    • 2022-09-27
    • 1970-01-01
    • 2013-07-14
    • 2021-06-25
    • 1970-01-01
    • 1970-01-01
    • 2012-12-14
    相关资源
    最近更新 更多