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

许多表之一的外键?

杭永安
2023-03-14
问题内容

设置外键约束的通常方法是选择外键将指向哪个表。

我在1个表和一组表之间有一个多态关系。

这意味着该表将与集合中的那些表之一相关。

例如。

images: person_id, person_type
subordinates: id, col1, col2...col9
products: id, colA, colB...colZ

在上面的示例中,如果person_type为“ subordinates”,则person_id应该是subordinates.id的外键,产品也应如此。

因此,我想知道,是否可以对多个表之一使用外键,或者在分配一个表时必须专门设置它指向的表?

这个问题是针对MySQL和PostgreSQL的。

谢谢


问题答案:

不,外键约束始终精确地引用一个父表。

这个问题经常出现。这是我过去的一些答案:

  • 为什么在多态关联中没有外键?
  • 可以对两个可能的表之一执行MySQL外键吗?
  • 引用同一列中的外键
  • 在StackOverflow克隆中,评论表应该与问答有什么关系?
  • MySQL-条件外键约束
  • 如何处理ERD(表)设计中的“或”关系?
  • MySQL:两个n:1关系,但不是一次

有关多态关联的更多信息,请参见我的演讲《SQL中的实用面向对象模型》或《SQL反模式:避免数据库编程的陷阱》一书。



 类似资料:
  • 问题内容: 我正在开发一个将用作其他应用程序的可扩展框架的应用程序。 基本类之一称为节点,节点具有内容。SQL表如下所示: TABLE节点(NodeId int,....等) 表格NodeContentRelationship(NodeId int,ContentType字符串,ContentId int) 开发人员可以扩展应用程序以创建自己的内容类型。 显然,从关系数据库的角度来看,这很不好,因

  • 问题内容: 因此,这更多是一个设计问题。 我有一个主键(例如用户的ID),并且有大量与该用户相关联的信息。 我应该根据信息将多个表细分为几类,还是只有一个表包含许多列? 我过去这样做的方法是拥有多个表,例如,一个表用于应用程序使用情况数据,一个表用于配置文件信息,一个表用于后端令牌等,以使事情看起来井井有条。 最近有人告诉我,最好不要那样做,有一个包含很多列的表也可以。关键是,所有这些列都具有相同

  • 问题内容: 我有3张桌子。一个基本表,称为表A,两个引用表A的表,分别称为表X和表Y。X和Y都具有引用表A的外键约束。X和Y的外键也是它们自己的首要的关键。 我想知道是否有可能添加一个仅允许这些表之一包含引用表A的Recrod的约束。因此,如果X具有引用A的记录,则Y不能有一个,并且Y有一个记录,引用A,那么X不能有一个。 这可能吗? 谢谢, 问题答案: 使用UDF的CHECK约束(这是Oded的

  • 我可以这样做吗?或者有没有其他更好的方法来处理这种情况

  • 问题内容: 我有以下数据库结构/层次结构: TABLE product_type : TABLE product : parent_id :是product_type ID TABLE treeNode : 它是一个树层次结构(根有n个子节点),层次结构的数量 未知 。 col的值为 “ CATEGORY” 或 “ GROUP” ,这意味着我有2棵树: Categories: Groups: TA

  • 问题内容: 我正在尝试在SQL Server的同一张表之间创建多对多关系。 我有一张桌子,上面有列和。 关系遵循以下规则: 一个孩子可以有很多父母 父母可以有很多孩子 ObjectA可以是ObjectB的子代,而ObjectB可以是ObjectA的子代 但是对象不能是其本身的直接子代 所以我创建第二个表格的列和,当然我希望这些关系通过级联删除。 但是当我在SQL Server中尝试此操作时,出现错