2015-12-01 158 views
0

我是SQL和数据库设计的新手。设计SQL Server数据库

我有,我需要创建一个表与用户(学生或教师)任务,每个用户可以是一组以上,并且每一组可以得到一个或多个任务来解决。

我创建了设计,但我认为是实体group的问题,因为当我在那里添加数据时,我无法做到这一点(我只有ID,但没有其他数据。当然我做错了)。

将数据添加到user实体工作。

我应该更改什么或应该如何将用户添加到组中?

enter image description here

+0

我看你需要三个表:用户,组和任务(有些喜欢奇异的名字,这只是我用复数)。你在正确的轨道上使用所有表的ID。我将添加一个更具体的答案。 –

+0

“当我在那里添加数据[组]时,我无法做到”你想添加什么数据? –

+0

好吧,我需要创建人群 – Andrew

回答

0

这是一个可能的方式做到这一点?

insert into [group] (group_id) values((SELECT ISNULL(MAX([group_id])+1,1) FROM [group] WITH(SERIALIZABLE, UPDLOCK))) 

insert into [Entity3] values(1,1) //values(x,y) x - user_id, y - group_id where I want to add the user 
insert into [Entity3] values(2,1) 
insert into [Entity3] values(3,1) 

这是按预期工作,但也许更短或更容易?

1

尝试添加更多的信息对每个组?如果是这样,这将是有意义的分组表在这些列中添加更多的列就像用户表并添加组相关数据:

group(id, name, type, description) 
user(id, name, ......) 

所以举例来说,如果你想更新任何组的名称,只需更新组列该组ID

-2

你或许应该摆脱2个绿色的实体。您可以将一个user_id值添加到组中,以及任务实体。您可能还需要为您的组添加“task_id”列。然后,您将添加您的用户,并从中填充组表。然后,您将通过user_id或group_id或两者来分配您的任务。另外,在任务列中,您可能需要添加“状态”列以定义任务是否预计完成或错误不完整。最后,为了让资源更友好一点,您可以选择创建一个“任务完成”表,它是user_id,group_id,task_id和status。然后,您可以创建一个过程,在给定的时间框架之后归档旧任务。

对于一个非常好的资源来构建轻量级数据库的视觉效果,你可以使用(https://www.vertabelo.com/),一旦你有像上面那样的线框,它可以导出到SQL创建脚本。

2

像这样的东西应该工作:

USERS 
----- 
user_id (pk) 
name 
surname 
email 

GROUPS 
------ 
group_id (pk) 
groupName 

TASKS 
----- 
task_id (pk) 
taskName 

USERSGROUPSM2M (Many-to-Many table) 
------------- 
id (pk) 
user_id (fk) 
group_id (fk) 

你可以有GROUP_ID#1和#42,或任意组合的user_id#1

GROUPSTASKSM2M (Another Many-to-Many table) 
------------- 
id (pk) 
group_id (fk) 
task_id (fk) 

你可以有task_ids#GROUP_ID#7 3,#76,或任意组合