尝试在具有数据和现有数据操作的现有表中添加新列作为外键

问题描述 投票:0回答:1

一个非常简单的例子。我的数据库中有一个带有表的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列时,我将此列设置为具有空值(正确吗?),但是作为外键,我不想允许空值。我可以更改它或如何处理它吗?

sql-server database api database-design database-schema
1个回答
1
投票

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放在工作表的其他位置,然后使用VLOOKUPXLOOKUP将名称转换为部门编号,然后根据以下内容编写SQL那

2)当我添加departmentId列时,我将此列设置为具有空值(正确吗?),但是作为外键,我不想允许空值。我可以更改它或如何处理它吗?

外键列允许具有NULL值-不是FK施加“无空”限制,而是列的可空性(将列更改为departmantid INT NOT NULL)。 FK引用主键,并且主键可能不为空(或者在某些数据库中,最多一个记录可以具有[部分为空] PK),但是您可以将这些部门留为空。如果您确实将列更改为非null,则需要先更正NULL值,否则更改将失败

© www.soinside.com 2019 - 2024. All rights reserved.