用于处理项目列表的表结构

时间:2016-09-19 16:49:57

标签: database

以下方案将在关系数据库中实现。

我有以下情况: 有多个用户,都是独一无二的。每个用户可以属于一个或多个“团队”。每个团队都可以拥有未知数量的用户。

到目前为止,我得到的是我应该有一个包含所有团队的表,另一个包含所有用户。 但是关于如何存储用户所属的团队,我是否需要为他所属的每个团队ID提供一个字段?我是否还需要确定他可以参加的团队数量限制,还是限制动态? (如何存储列表,在其他应用程序中,限制是可用的内存)。

理想情况下,我想要一个允许我轻松查找用户所属团队的结构。

Teams表中也存在类似的问题,我是否还需要在团队中定义用户限制?在这种情况下,我是否需要团队中每个用户的列?

最后,这个例子是应该避免的,我应该寻找不同的结构吗?如果是这样,请提供一个例子。

我不是在寻找代码示例,只是关于如何在这些示例中构建关系的示例。

还接受一些文档建议,讨论哪种数据库结构类型用于每种类型的问题。

2 个答案:

答案 0 :(得分:0)

你是对的。您将拥有一个用户,团队和加入它们的表的表(也许是UserTeam)。 UserTeam表将存储用户和单个团队的ID;如果该人在多个团队中,则会有多行。

就限制而言,这是一个需求问题,而不是数据库问题。你当然可以限制它,但不应该是一个技术问题。

以下是MS SQL Server中的表结构:

DECLARE @User TABLE (
    UserID INT,
    UserName NVARCHAR(200)
)

DECLARE @Team TABLE(
    TeamID INT,
    Name NVARCHAR(200)
)

DECLARE @UserTeam TABLE (
    UserID INT,
    TeamID INT
)

答案 1 :(得分:0)

你的问题被称为多对多关系

您的数据库应如下所示

用户表包含(IdUserNamePassword,...其他列

团队表包含(IdName,..其他列

UserTeams UserIdTeamId,其他列

现在,您有2个表UserTeam的选项

  1. UserId和TeamId都是主键和外键:这意味着每个用户不能在同一个团队中注册两次,但可以在许多但是独特的团队中注册
  2. UserId和TeamId都是外键,您有另一个主键ID:例如,如果您添加了加入日期(必填)和休假日期(可选),此结构将允许您跟踪用户团队的历史记录并且当用户离开团队时你需要更新它,你需要添加一些约束,用户无法在相同的团队中注册,对于相同用户ID和团队ID的记录,休假日期为空。
  3. 第二种结构编码如下:

    UserTeams

    • Id:主键
    • UserIdUsers table
    • 的外键引用
    • TeamIdTeams table
    • 的外键引用
    • DateOfJoin:必填日期时间字段
    • DateOfLeave:可选的日期时间字段,将在用户离开团队时填写

    通常我更喜欢第二种方法,它可以提供所需结构更少的更多细节。

    希望这会对你有所帮助