用于连接表的mysql常用列标准

时间:2017-12-21 13:32:32

标签: mysql sql join

如果我有两个表必须在其间执行连接,请说

表1:

groupid

表2:

{{1}}

{{1}}必须是关键列,还是普通列?我需要对此进行解释。

是否必须是关键列,如果是,为什么?

4 个答案:

答案 0 :(得分:0)

groupid应该是groupdetails_table的主键和groupuserdetails_table的外键

groupuserdetails_table中你的密钥可能应该是(groupid, userid)

的组合

但是如果它们是关键的话,你可以加入你想要的任何列

答案 1 :(得分:0)

我不确定数据库的进一步架构。 groupid看起来应该是表groupdetails_table上的主键...除非您有一个名为group的其他表。 groupuserdetails_table看起来像是groupdetails和group之间的关联表。

在任何情况下,如果要在关系数据库(如MySQL)中执行有效的连接,那么这两列应该始终是键,无论是外键还是主键。这是因为制作列键确保具有相同值的字段实际上是相同的,并且引用不同事物的字段永远不会具有相同的值。

如果您要有一个名为group(或groups的表,具体取决于您的偏好),并且未将字段groupid指定为主键,则表示两个不同的组可以有相同的身份。

外键确保一个表中的字段与另一个表中的一个字段完全对应。假设你有一个表group_user,那么它的字段groupid应该是一个外键,指的是group.groupid。这意味着group_user中的任何行都不能引用不存在的组。

因此,虽然您可以在技术上连接所需的任何列,但为了确保连接有意义,连接的列应该是键。

答案 2 :(得分:0)

它在可执行性方面不一定是关键,因为你可以有一个不涉及密钥的连接条件,但由于它是一个ID,你需要将它设为foreign key以避免将来出现不一致。如果它不是foreign key,那么没有什么可以阻止您插入/更新引用groupid中不存在的table值。此外,如果不是af oreign key,则从参考table中删除记录后,您最终可能会悬空记录,其中groupid值不再存在参考表。

答案 3 :(得分:0)

数据库架构中的Smth错误:

  1. 您应该为表格中的每条记录设置唯一ID;
  2. 如果您想限制最大用户数,请将no.of.members重命名为max_members(或类似),否则按group_user计算group_id条记录中的记录数};
  3. 还尝试遵循社区条件

    • 在表格或列中的单词之间使用下划线符号,但不使用点

    我更喜欢:

    group(id[key], created)
    group_user(id[key], group_id, role, status)
    and group.id = group_user=group_id