当前位置: 首页 > 面试题库 >

仅允许两个表之一引用基本表的约束

单展
2023-03-14
问题内容

我有3张桌子。一个基本表,称为表A,两个引用表A的表,分别称为表X和表Y。X和Y都具有引用表A的外键约束。X和Y的外键也是它们自己的首要的关键。

我想知道是否有可能添加一个仅允许这些表之一包含引用表A的Recrod的约束。因此,如果X具有引用A的记录,则Y不能有一个,并且Y有一个记录,引用A,那么X不能有一个。

这可能吗?

谢谢,


问题答案:

使用UDF的CHECK约束(这是Oded的回答)不能很好地扩展并且并发性很差。

所以:

  • 创建一个新表,例如TableA2XY
  • 它具有TableA的PK和带有CHECK的char(1)列,以允许仅X或Y。并且对A的PK也具有唯一约束。
  • tableX和tableY具有新的char(1)列,并带有检查以分别仅允许X或Y
  • tableX和tableY在两列上的FK均为TableA2XY

这是超键或子类型方法

  • 全部基于DRI
  • 没有触发器
  • CHECK约束中没有具有表访问权限的udfs。


 类似资料:
  • 问题内容: 给定一个PostgreSQL表,该表具有一个名为的列和一个约束,如下所示: 在这种情况下,我可以提取有关此约束的信息: 但是是否有可能编写一个专门返回未决,成功,失败的查询? 能够在我的应用程序中记住此查询的结果,而不需要维护重复的副本,将是很棒的。 问题答案: 您可以查询系统目录,例如: 使用以下函数 解压缩 字符串:

  • 我正在处理一个电话号码正则表达式,这是我到目前为止所拥有的: 它允许0到9之间的数字,也允许''和空白。范围必须在8到20之间。这工作罚款。 我想进一步得到的是,只有8到20个数字,其中“”和空格是分开的。 类似这样的内容: 建议?

  • 我有以下模式来验证字符串 但在这里,它也不接受两个字符串之间的空间。有人能告诉我在上面的模式中我必须做什么改变,以便在两个字符串之间留出空间吗?但是字符串的开头和结尾不应该允许有空格。

  • 问题内容: 我在SQL Server 2008数据库中具有以下表: tblItem ,它具有一个 ItemID 字段; tblGoodItem ,它也有一个ItemID字段,并且有一个指向tblItem的外键; tblBadItem ,它也具有ItemID字段,并且还具有指向tblItem的外键。 一个项目不能同时是好项目和坏项目。它必须是一个或另一个。但是,无论该项目是好是坏,它都必须是一个项目

  • 问题内容: 如何只允许本地请求进行Elasticsearch?所以命令像: 只能在localhost上运行,并要求类似: 会被拒绝? 因为从我看来,elasticsearch默认情况下允许它。 编辑: 根据http://www.elasticsearch.org/guide/reference/modules/network.html, 您可以管理参数以允许主机。默认情况下,它设置为 问题答案: