以下方案将在关系数据库中实现。
我有以下情况: 有多个用户,都是独一无二的。每个用户可以属于一个或多个“团队”。每个团队都可以拥有未知数量的用户。
到目前为止,我得到的是我应该有一个包含所有团队的表,另一个包含所有用户。 但是关于如何存储用户所属的团队,我是否需要为他所属的每个团队ID提供一个字段?我是否还需要确定他可以参加的团队数量限制,还是限制动态? (如何存储列表,在其他应用程序中,限制是可用的内存)。
理想情况下,我想要一个允许我轻松查找用户所属团队的结构。
Teams表中也存在类似的问题,我是否还需要在团队中定义用户限制?在这种情况下,我是否需要团队中每个用户的列?
最后,这个例子是应该避免的,我应该寻找不同的结构吗?如果是这样,请提供一个例子。
我不是在寻找代码示例,只是关于如何在这些示例中构建关系的示例。
还接受一些文档建议,讨论哪种数据库结构类型用于每种类型的问题。
答案 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)
你的问题被称为多对多关系
您的数据库应如下所示
用户表包含(Id
,UserName
,Password
,...其他列
团队表包含(Id
,Name
,..其他列
UserTeams (UserId
,TeamId
,其他列
现在,您有2个表UserTeam的选项
第二种结构编码如下:
UserTeams
Id
:主键UserId
:Users
table TeamId
:Teams
table DateOfJoin
:必填日期时间字段DateOfLeave
:可选的日期时间字段,将在用户离开团队时填写通常我更喜欢第二种方法,它可以提供所需结构更少的更多细节。
希望这会对你有所帮助