0

我正在尝试在 SQL 表中设置一个属性,该属性由用户输入和部分外键指定的部分 id 组成。例如:员工将有一个 8 字符长的 id,前 4 位是用户将输入的部分,后 4 个字符将引用分支表以使用分支 id。

看起来我需要使用 CHECK 约束来执行此操作,但我不确定如何强制执行属性值的第二部分以确保它在另一个表中。

我希望问题的措辞正确,因为我仍在学习 SQL。

4

1 回答 1

1

看起来我需要使用 CHECK 约束来执行此操作,但我不确定如何强制执行属性值的第二部分以确保它在另一个表中。

为了“查看”另一个表,您需要在 CHECK 约束中使用 SELECT 语句。据我所知,大多数 SQL dbms 不会让你这样做。(否则,标准 SQL 将使用断言;我不确定是否有任何SQL dbms 支持断言。)

相反,使用两列——一列用于用户提供的四个字符,另一列用于表示分支的最后四个字符。您可以(并且应该)使用

  • 对存储用户提供的值的列的 CHECK 约束,以保证它是四个字符而不是更少,
  • 对branches.branch_id 列的 CHECK 约束,以保证它是四个字符且不少于,并且
  • branch_id 上的外键约束,引用表分支。考虑一下这是否应该级联更新和删除。

外键约束为您提供的行为保证很重要。他们保证您在新表中为 branch_id 使用的任何值都将存在于分支表中,并且如果使用的 branch_id 发生更改,该更改也将记录在您的新表中。(如果您级联更新。)如果您将两个值捆绑到单个列中,您将不会获得这些保证。

最后 4 个字符将引用分支表以使用分支 ID。

您可以通过这种方式复制分支 id,但不能引用它。引用是数据库设计中的一个技术术语;它与外键引用有关。

于 2012-05-10T21:53:57.653 回答