Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
工人之间的循环参考+;SQL数据库中的项目和雇主_Sql_Sql Server - Fatal编程技术网

工人之间的循环参考+;SQL数据库中的项目和雇主

工人之间的循环参考+;SQL数据库中的项目和雇主,sql,sql-server,Sql,Sql Server,我有一份雇主和工人的名单。我需要登记一名工人为不同雇主所做的项目,但我还需要了解当前工人的雇主。我有: create table dbo.Employers ( Id int identity not null Name nvarchar not null ); create table dbo.Workers ( Id int identity not null CurrentEmployerId int not null, -- FK Name nvarchar (

我有一份雇主和工人的名单。我需要登记一名工人为不同雇主所做的项目,但我还需要了解当前工人的雇主。我有:

create table dbo.Employers
(
  Id int identity not null 
  Name nvarchar not null
);

create table dbo.Workers
(
  Id int identity not null 
  CurrentEmployerId int not null, -- FK
  Name nvarchar (120) not null, 
);

create table dbo.Projects
(
  Id int identity not null 
  WorkerId int not null, -- FK  
  EmployerToWhichTheProjectWasMadeId int not null, -- FK
  Name nvarchar (120) not null,      
);
在dbo.Workers中,我有一个EmployerId FK,它表示当前雇主

在dbo.Projects中,我有两个FK:WorkerId和EmployerId,说明项目由工人X向雇主Y进行。由于工人X有一个FK雇主,工人X目前为雇主Z工作

我不是因为这个才得到循环引用吗


如何避免这种情况?

我认为上述代码没有任何问题。唯一的要求是,如果你要招聘新员工,你必须有一个雇主。如果你正在做一个新项目,你必须有一个工人和一个雇主。循环引用类似于雇主需要EmployerId才能创建

在您的模型中,工人可以在不完全属于其雇主的项目中工作。如果这是一个有效的场景,那么模型是正确的。如果这是不可能的,那么您可以从项目中删除雇主id,因为雇主将由工人决定。

我的模型是这样的原因是:工人中的雇主是当前雇主,而项目中的雇主是工作对象的雇主。因此,这是一个过去的雇主。这有意义吗?是的,有意义;然后,根据业务规则,该模型是正确的。没有循环引用,只有普通的FK依赖项。明白了。。。这是我的疑问。我只是标出了答案。非常感谢。