设计SQL Server数据库

时间:2015-12-01 21:43:27

标签: sql

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

我有一个任务,我需要创建一个包含用户(学生或教师)的表,每个用户可以在一个或多个组中,每个组可以获得一个或多个任务来解决。

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

user实体添加数据正在发挥作用。

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

enter image description here

4 个答案:

答案 0 :(得分: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)

您可以将user_id#1与group_id#1和#42或任意组合

一起使用
GROUPSTASKSM2M (Another Many-to-Many table)
-------------
id (pk)
group_id (fk)
task_id (fk)

你可以将group_id#7与task_ids#3和#76或任意组合

一起使用

答案 1 :(得分:1)

是否正在尝试为每个群组添加其他信息?如果是这样,在组表中添加更多列就像用户表一样,并在这些列中添加组相关数据:

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

因此,例如,如果您要更新任何群组的名称,只需更新该群组的 名称 id

答案 2 :(得分: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)

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

答案 3 :(得分:-2)

你应该摆脱2个绿色实体。您可以将user_id值添加到组和任务实体中。您可能还想添加一个" task_id"列到您的组。然后,您将添加您的用户,并从中填充组表。然后,您将通过user_id OR group_id或两者分配您的任务。此外,在任务栏中,您可能希望添加"状态"用于定义任务是否预期完成或错误不完整的列。最后,为了更加资源友好,您可以选择创建一个"任务完成的"表是user_id,group_id,task_id和status。然后,您可以创建一个在给定时间范围之后归档旧任务的流程。

对于可视化构建轻量级数据库的优秀资源,您可以使用(https://www.vertabelo.com/),一旦线框正确如上所述,它就可以导出到SQL创建脚本。