我正在尝试在 SQL 表中设置一个属性,该属性由用户输入和部分外键指定的部分 id 组成。例如:员工将有一个 8 字符长的 id,前 4 位是用户将输入的部分,后 4 个字符将引用分支表以使用分支 id。
看起来我需要使用 CHECK 约束来执行此操作,但我不确定如何强制执行属性值的第二部分以确保它在另一个表中。
我希望问题的措辞正确,因为我仍在学习 SQL。
我正在尝试在 SQL 表中设置一个属性,该属性由用户输入和部分外键指定的部分 id 组成。例如:员工将有一个 8 字符长的 id,前 4 位是用户将输入的部分,后 4 个字符将引用分支表以使用分支 id。
看起来我需要使用 CHECK 约束来执行此操作,但我不确定如何强制执行属性值的第二部分以确保它在另一个表中。
我希望问题的措辞正确,因为我仍在学习 SQL。
看起来我需要使用 CHECK 约束来执行此操作,但我不确定如何强制执行属性值的第二部分以确保它在另一个表中。
为了“查看”另一个表,您需要在 CHECK 约束中使用 SELECT 语句。据我所知,大多数 SQL dbms 不会让你这样做。(否则,标准 SQL 将使用断言;我不确定是否有任何SQL dbms 支持断言。)
相反,使用两列——一列用于用户提供的四个字符,另一列用于表示分支的最后四个字符。您可以(并且应该)使用
外键约束为您提供的行为保证很重要。他们保证您在新表中为 branch_id 使用的任何值都将存在于分支表中,并且如果使用的 branch_id 发生更改,该更改也将记录在您的新表中。(如果您级联更新。)如果您将两个值捆绑到单个列中,您将不会获得这些保证。
最后 4 个字符将引用分支表以使用分支 ID。
您可以通过这种方式复制分支 id,但不能引用它。引用是数据库设计中的一个技术术语;它与外键引用有关。