【问题标题】:Recommended database structure with relations [duplicate]推荐的具有关系的数据库结构[重复]
【发布时间】:2016-02-26 17:42:44
【问题描述】:

我创建了一个 MVC 解决方案,用户可以在其中注册活动。 这是使用UserRecordEventRecord 之间的Many-to-Many 关系创建的。当用户注册事件时,会创建该用户与事件之间的关系。当他/她注册事件时,我需要能够向用户添加一些凭据。例如为单个事件添加经验。

凭据应该只绑定到事件和用户之间的关系。因此,如果 User1 注册了 Event1 和 Event2,他就可以将一组凭据添加到 Event1,并将另一组凭据添加到 Event2。

您会如何推荐一个适当的数据库结构,其中添加了如上所述的凭据?

我的用户记录:

public class UserRecord
{
    [Display(AutoGenerateField = false)]
    public Guid Id { get; set; }
    public string Gender { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    public virtual ICollection<EventRecord> Events { get; set; }
}

我的活动记录:

public class EventRecord
{
    public Guid OwnerId { get; set; }
    public string Title { get; set; }

    public virtual ICollection<FighterRecord> Fighters { get; set; }
}

在 Entity Framework 中使用迁移后,在我的数据库中创建了上述两条记录之间的联结表,名为 UserRecordEventRecord

【问题讨论】:

  • 在关系数据库中实现多对多的唯一正确方法是联结表
  • 通过在每个record 中添加ICollection 后迁移,将联结表添加到我的数据库中。用户和事件之间的多对多关系已经启动并运行。我只是不确定如何创建我的问题中提到的凭据。
  • 会写一个答案
  • 您在询问数据库结构,但您的问题包含 EF 模型。你到底想要什么?
  • 我添加了 EF 模型以显示我当前的设置,其中用户和事件之间的关系是通过 EF 迁移创建的。我在问如何添加问题中提到的凭据。

标签: c# asp.net-mvc entity-framework


【解决方案1】:

好的,所以要在关系数据库中实现多对多关系实际上只有一种方法 - 联结表。

联结表是一个数据库表,其中包含来自同一数据库中两个或多个其他数据库表的公共字段

这意味着您需要另一个表来保存两个表的 id,它们之间存在多对多关系。请参见下面的示例:

你有两张桌子:

用户记录

Guid ID

nvarchar 名字

nvarchar 姓氏

事件记录

Guid ID

nvarchar 标题

现在您需要创建第三个表来保存对这两个表的引用

UserEvent_link

Guid 用户 ID

Guid EventId

//您也可以添加一些id作为主键或将UserId/EventId对作为复合主键

多亏了这一点,您现在可以针对多个事件存储多个用户。

【讨论】:

  • 感谢您的回答!在您发表第一条评论后,我编辑了我的问题。用户和事件之间的联结表已经创建。我正在寻求一种解决方案,可以将凭据添加到用户和事件之间的每个关系中。
  • 只需在连接表中添加另一列来存储这些凭据
猜你喜欢
  • 2013-08-20
  • 2019-08-15
  • 1970-01-01
  • 2013-06-25
  • 1970-01-01
  • 2011-06-01
  • 1970-01-01
  • 2010-11-14
  • 2012-07-10
相关资源
最近更新 更多