推荐的数据库结构与关系

时间:2015-11-24 10:20:43

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

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

凭据应仅绑定到事件和用户之间的关系。因此,如果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; }
}

我的EventRecord:

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

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

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

1 个答案:

答案 0 :(得分:0)

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

  

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

这意味着您需要另一个表来保存两个表的ID,这两个表之间存在多对多的关系。见下面的例子:

你有两张桌子:

<强> UserRecord

Guid Id

nvarchar FirstName

nvarchar LastName

<强> EventRecord

Guid Id

nvarchar标题

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

<强> UserEvent_link

Guid UserId

Guid EventId

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

由于这个原因,您现在可以针对多个事件存储多个用户。