【问题标题】:Multiple foreign keys and multiple constrains多个外键和多个约束
【发布时间】:2015-03-06 03:54:07
【问题描述】:

假设我有一个名为 box 的表,其中 box_id 属性作为 PK。

还有另外两个表。第一个是 red_boxes,第二个是 blue_boxes。

我在 red_boxes 表中添加了一个约束

ALTER TABLE red_boxes
ADD CONSTRAINT fk_box_id
FOREIGN KEY (box_id)
REFERENCES boxes (box_id);

现在,我想为 blue_boxes 表添加一个约束。如果我没有将约束添加到 red_boxes,SQL 结构将如下所示。解决这个问题的明显方法是用不同的方式命名一个新的约束,例如fk_box_id2,但这是一个好方法吗?我是否应该以某种方式重用以前的约束,或者这是不可能的,为什么?

ALTER TABLE blue_boxes
ADD CONSTRAINT fk_box_id
FOREIGN KEY (box_id)
REFERENCES boxes (box_id)

【问题讨论】:

  • 约束名称是标识约束的ID,它就像约束的PK(仅作为示例)。因此,您不能有两个具有相同名称的约束。一个好的做法是用它所属的表的一部分来命名约束,例如fk_boxid#redboxfk_boxid#bluebox(# 只是我使用的一个约定)小心不要在 oracle 中推断名称限制,如果我召回是 30 个字符

标签: sql oracle database-administration


【解决方案1】:

每个约束都是独立的,并且需要一个唯一的名称。我的建议是使用源表名和目标表名,例如fk_red_boxes_boxesfk_blue_boxes_boxes。通过这种方式,您可以轻松识别他们来自何处以及去往何处。

如果您的表名中有下划线,您可能想提出一个修改后的约定,以便您一眼就能轻松理解。例如,双下划线:fk__blue_boxes__boxesfk__red_boxes__boxes

【讨论】:

  • 我更喜欢 Jorge 使用另一个角色的想法,例如$ 或 # - 更好地利用 30 个字符的限制。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 2011-05-30
  • 2021-07-10
相关资源
最近更新 更多