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



一个非常简单的例子。我有网站API与数据库中的一个表

Employees
---------
Id
---------
Name

例如,我有50张唱片。

现在我必须实现一个功能来添加有关部门的额外信息。因为我有一对多的关系,所以新的数据库模式是与部门id

Employees           Department
----------         -----------
Id                  Id
---------           -----------
Name                Name
--------- 
DepartmentId

为此,我运行查询(我使用SQL服务器(

alter table Employees add constraint fk_employees_departmentid
foreign key (DepartmentId) references Department(Id);

但现在我有一些问题需要处理

1( 现在我有50个没有departmentId的现有记录。但是,我必须手动添加此值?最佳实践是什么?50张唱片是可能的,但2000张甚至更多?

2( 当我添加departmentId列时,我将该列设置为具有null值(正确吗?(,但作为外键,我不希望允许null值。我可以更改它吗?或者我该如何处理它?

1(现在我有50条没有departmentId的现有记录。但是,我必须手动添加此值?最佳实践是什么?50张唱片是可能的,但2000张甚至更多?

这取决于情况。你可以为"未分配"设置一个新的部门,并将它们全部分配给该部门;你可以向人力资源部发送一份电子表格,上面写着"以下员工没有指定的部门;他们在哪个部门?ps;在发回之前不要从工作表中删除EmployeeID列;我需要它来更新数据库">。这在很大程度上是一个商业背景问题,而不是一个技术问题。X 000条记录很容易处理。。如果你(或其他人(手动完成,只需要一点时间。这些信息可能在其他地方可以获得;你也许可以向所有部门负责人发送一份名单,说"这些人中有你的吗?请从这个电子表格中删除你团队中没有的所有名字,并将其发送给我">然后根据你得到的更新数据库

由于这是一次操作,您不需要任何特别的技巧——您只需取回Excel表,并在空栏中输入:

="UPDATE emp SET departmentID = 5 WHERE id = " & A1

填写它以生成一堆更新语句,将文本复制到查询工具中,然后点击go;不需要把工作表加载到表中,进行更新连接等,只需要在excel中用一些技巧性的东西拼凑起来,就可以为你编写SQL,复制/粘贴/运行。如果人力资源部已经发回了带有部门名称列表的表格,那么将部门名称和id放在表格的其他地方,并使用VLOOKUP或XLOOKUP将名称转换为部门编号,然后根据编写SQL

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

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

相关内容

最新更新