【问题标题】:Insert data where Multiple Foreign keys are in SQL server table在 SQL Server 表中插入多个外键的数据
【发布时间】:2017-03-01 16:18:18
【问题描述】:

我有三个表:

  • 教师
    • PK:A_pk
  • 学生
    • PK: B_pk
  • 发布
    • PK: C_pk
    • FK: A_pk
    • FK: B_pk

我有一个网站页面,用户可以在其中撰写不同的帖子。

当教师在该组中发帖时,我会将数据插入到Post 表中,如下所示:

A_pk = teacherName
C_pk = Post_text

当学生在该组中发帖时,我会将数据插入到Post 表中,如下所示:

B_pk = studentName
C_pk = Post_text.

原因是我想记录哪些用户在我的组中发布了数据。

现在的问题是如何在 Post 表中插入记录?

【问题讨论】:

  • 禁用 FK 不是一个好习惯,因此您必须先在表 A 和表 B 上插入缺少的 PK,然后再插入表 C。没有办法解决这个问题。也许我们可以帮助您设计桌子?如果您(或某人)在 C 中强制使用 FK 约束,为什么您没有表 A 和 B 的值?
  • 为什么要插入没有对应主键的外键?
  • 我更新了我的帖子。请再读一遍
  • 据我了解。你可以有可为空的 FK。所以当你为学生插入时,A_PK 可以为空,反之亦然。

标签: asp.net sql-server entity-framework sql-server-2014


【解决方案1】:

您不能将表中的一个字段作为两个不同表的外键。您需要做的是更改您的数据结构以将您的学生和教师保存在同一个表中并在您的 Post 表中使用该主键,或者在您的 Post 表中有两列 - 一列用于 @987654323 @ 主键和一个用于Student 主键,并根据发帖人填充适当的主键。

绝对没有必要也没有理由在同一个字段中拥有两个不同表的 ID。这样做是糟糕的设计。

【讨论】:

    【解决方案2】:

    终于---我找到了解决方案。

    实际上它非常简单......就像您可以拥有可为空的 FK。所以当您为学生插入时,A_PK 可以为空,反之亦然。 -

    如果老师在群里发数据比

    if(A_pk != null) { 插入 A_pk 并插入 C_pk }

    如果学生在小组中发布数据而不是

    else if(B_pk != null) { 插入 B_pk 并插入 C_pk }

    非常感谢先生 KumarHarsh 1 小时前

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-12
      • 1970-01-01
      • 2018-08-07
      • 2021-09-15
      相关资源
      最近更新 更多