外键检查表属性中的约束

时间:2012-05-10 20:56:32

标签: sql

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

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

我希望这个问题正确,因为我还在学习SQL。

1 个答案:

答案 0 :(得分:1)

  

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

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

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

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

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

  

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

您可以复制分支ID,但不能引用它。 参考是数据库设计中的技术术语;它与外键引用有关。