如果我有两个表必须在其间执行连接,请说
表1:
groupid
表2:
{{1}}
{{1}}必须是关键列,还是普通列?我需要对此进行解释。
是否必须是关键列,如果是,为什么?
答案 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错误:
no.of.members
重命名为max_members
(或类似),否则按group_user
计算group_id
条记录中的记录数}; 还尝试遵循社区条件
我更喜欢:
group(id[key], created)
group_user(id[key], group_id, role, status)
and group.id = group_user=group_id