【问题标题】:Foreign key to multiple tables insert statement conflict多个表的外键插入语句冲突
【发布时间】:2018-01-12 07:54:53
【问题描述】:

我对此有疑问:

数据库图

object_id 是一个外键引用 5 个表的“id”列。 所以我不能将第 5 条记录插入到“connected_nodes”表中,因为在“klapan_treh”表中不存在第 5 条记录,但在“ns”表中存在第 5 条记录。

我的解决方案是为每个表创建单独的列,例如:ns_id 引用 ns(id)、klapan_treh_id 引用 klapan_treh(id) 等。

但是你能告诉我另一种改进的方法吗?

【问题讨论】:

  • 不向您推荐其他相同问题的问题并不是 stackoverflow 的工作方式。您要查找的键类型(检查 id 是否存在于 6 个不相关的表之一中)在关系数据库中没有意义。但你可能想用它表达一些逻辑。要告诉您如何在数据库模型中正确实现它,您需要在这里告诉我们您要表达的内容。您添加几列的解决方法表示您希望将 6 个表链接在一起(例如,is_t 的 id 6 和 nodef 的 id 9),这可能也不是您的意思。
  • mysqlsql-server?选对的!
  • B001,顺便说一句,我亲爱的朋友,mysql和MS SQL Server使用相同的Transact-SQL语言,所以我认为我的链接是正确的。
  • Solarflare,它很复杂。下面罗恩巴拉德的回答是合适的,他立即理解了我的问题,没有一些额外的解释。感谢您的回复:)
  • 1.不,MySQL 和 Transact-SQL 是 SQL 的 2 个不同变体。 SQL 服务器只使用后者。 2. RonBallard 不明白。他猜到了。你不清楚。 3. 请use text, not images/links, for text (including tables)。这意味着在文本中给出相关的 DDL,并给出一个带有相关位的 ERD 作为额外的便利。例如“object_id”在哪里?

标签: mysql sql sql-server database foreign-keys


【解决方案1】:

我认为您提出的解决方案是最好的。您需要在 connected_nodes 表中有 5 个单独的外键。这些中的每一个都指向其他表之一中的 id。我想这就是你的建议。

每个外键都可以是可选的(可以为空),因此如果您有 4 个连接的节点,则您有 4 个外键被填写,第 5 个为空。

【讨论】:

  • 这通常是一种反模式,应该使用子类型。
  • 建议的解决方案将使外键工作,但具有 5 路连接是一种非常不寻常的结构。如果是我的数据库,我会非常仔细地考虑这一点,但由于我不明白根据我们这里的信息建模了什么,我觉得无法建议应该如何做。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-25
  • 1970-01-01
  • 2015-05-17
  • 1970-01-01
  • 1970-01-01
  • 2016-03-02
相关资源
最近更新 更多