一个非常简单的例子。我的数据库中有一个带有表的Web API
Employees
---------
Id
---------
Name
例如,我有50条记录。
现在,我必须实施一项功能,以添加有关部门的额外信息。因为我有一对多关系,所以新的数据库模式是部门ID
Employees Department
---------- -----------
Id Id
--------- -----------
Name Name
---------
DepartmentId
为此,我运行查询(我使用SQL Server)
alter table Employees add constraint fk_employees_departmentid
foreign key (DepartmentId) references Department(Id);
但是现在我有一些问题要处理
1]现在,我有50条现有记录,没有departmentId。但是,我必须手动添加此值吗?最佳做法是什么?可能有50条记录,但有2000条记录甚至更多?
2)当我添加departmentId列时,我将此列设置为具有空值(正确吗?),但是作为外键,我不想允许空值。我可以更改它或如何处理它吗?
1]现在,我有50条现有记录,没有departmentId。但是,我必须手动添加此值吗?最佳做法是什么?可能有50条记录,但有2000条记录甚至更多?
取决于。您可以为“未分配”设置一个新部门,并将所有部门分配给该部门。您可以向HR发送电子表格,说“以下员工没有指定的部门;他们在哪个部门?ps;请不要从工作表中删除EmployeeID列,然后再将其发回;我需要它更新数据库“。这很大程度上是业务相关的问题,而不是技术性的问题。 X千条记录易于处理。.如果您(或其他人)手动进行,则只需花费一些时间。此信息可能在其他地方可用。您可能会向所有部门负责人发送一份清单,说“这些人中有谁吗?请从此电子表格中删除您团队中没有的所有姓名,然后将其发回给我”然后更新根据您所获得的回报DB
由于这是一次性操作,因此您不需要任何特别的事情-您可以将Excel工作表放回原处并放在一个空列中:
="UPDATE emp SET departmentID = 5 WHERE id = " & A1
并填写下来,生成一堆更新语句,将文本复制到您的查询工具中,然后按一下go;不需要花所有精力将工作表加载到表中,进行更新联接等-只需将hacky样式的sling一起放在excel中即可为您编写SQL,进行复制/粘贴/运行。如果HR已将表中的部门名称列表发回给工作人员,则将部门名称和ID放在工作表的其他位置,然后使用VLOOKUP或XLOOKUP将名称转换为部门编号,然后根据以下内容编写SQL那
2)当我添加departmentId列时,我将此列设置为具有空值(正确吗?),但是作为外键,我不想允许空值。我可以更改它或如何处理它吗?
外键列允许具有NULL值-不是FK施加“无空”限制,而是列的可空性(将列更改为departmantid INT NOT NULL
)。 FK引用主键,并且主键可能不为空(或者在某些数据库中,最多一个记录可以具有[部分为空] PK),但是您可以将这些部门留为空。如果您确实将列更改为非null,则需要先更正NULL值,否则更改将失败