gpt4 book ai didi

sql - 设计条件关系

转载 作者:搜寻专家 更新时间:2023-10-30 19:47:44 25 4
gpt4 key购买 nike

我在设计数据库表时需要帮助。

员工
编号
EmployeeTypeId

员工类型
编号
姓名

汽车
编号
员工编号

我如何强制只有一种类型的员工(司机)可以是 Car 表中的外键,还是我应该重新设计表?

最佳答案

我认为预先武装数据库是一个好主意,这样就无法输入不可信的数据。然而,在这里强制执行此操作有点棘手......

解决方案一:

将 EmployeeTypeId 添加到 Car 表中。然后使 (EmployeeId, EmployeeTypeId) 成为 Employee 表的外键(您可能必须在这两个字段上创建唯一约束,以便能够将它们用于外键引用)。然后在 Car.EmployeeTypeId 上添加一个约束以确保它是一个驱动程序。我知道这看起来多余,但确实没问题,因为你不能在这里为一个 Employee 分配另一个 EmployeeType,所以一致性还是有保证的。不过,我承认这种方法有点笨拙。

解决方案 2:

在 Car 表上使用 before-insert tigger,查找员工并确保它是司机,否则抛出异常。在我看来,这是一个更好的解决方案,仅因为它的简单性。然后,您可以向表 Car 添加一列,其中包含您使用的类型的唯一名称,例如UniqueName = 'DRIVER',因此您不必将 ID 用作魔数(Magic Number)。您会看到,通常一个 EmployeeType 与数据库中的另一个一样好。如果你想在某个条目上构建特殊的逻辑,你需要一个句柄。唯一名称是一种方法,标志 IsDriver = TRUE/FALSE 是另一种方法。

关于sql - 设计条件关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37275677/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com