在SQL中,如何防止在外键不一定相等但包含在其中的位置插入值?

在SQL中,如何防止在外键不一定相等但包含在其中的位置插入值?,sql,oracle,Sql,Oracle,如何防止基于另一个表中某个字段中的类似值向该字段添加值 我有两张桌子: 首先,我有区号:例如0112015201365098 第二,我有电话费前缀:011015013609 我希望防止在第二个表中的任何值被“包含”时将值插入到第一个表中。因此,0112可以插入,因为它包含“011”。注意:前缀和区号的长度不同。这些是VARCHAR2 致以最诚挚的问候。正如Anri所说,在业务逻辑中进行操作 如果它必须完全在sql中,您可以创建一个触发器,它不会阻止添加,但会在插入后删除记录。我不推荐这种方法,但

如何防止基于另一个表中某个字段中的类似值向该字段添加值

我有两张桌子:

首先,我有区号:例如0112015201365098

第二,我有电话费前缀:011015013609

我希望防止在第二个表中的任何值被“包含”时将值插入到第一个表中。因此,0112可以插入,因为它包含“011”。注意:前缀和区号的长度不同。这些是VARCHAR2


致以最诚挚的问候。

正如Anri所说,在业务逻辑中进行操作


如果它必须完全在sql中,您可以创建一个触发器,它不会阻止添加,但会在插入后删除记录。我不推荐这种方法,但如果您必须完全在sql中执行,那么这可能是一种选择。

您可以有一个前缀表和一个后缀表,其中后缀表有一个外键指向前缀表的主键

因此,您的前缀将包含以下内容

id   prefix
---- -------
1    011
2    015
3    0136
4    09
后缀表如下所示

id   prefixid suffix
---- -------- --------
1    1        2
2    2        2
3    3        5
4    4        8
我不确定我是否特别喜欢这种设计,但这是确保区号前缀部分有效的一种方法


另一个选项可能是使用检查约束来验证区号的第一部分是否在允许的前缀列表中。您需要在检查约束内的前缀末尾使用通配符。

您可以在业务逻辑中使用通配符。区号是否总是比费用前缀短一个字符?我建议使用触发器作为保护措施的业务逻辑。