gpt4 book ai didi

mysql - 完全唯一行的表的主键?

转载 作者:搜寻专家 更新时间:2023-10-30 22:12:17 25 4
gpt4 key购买 nike

直接进入这个。我有一张表,用于表示一种“喜欢”的功能。这张表自然有以下内容:

Name      | Type   | Attributes  | (Comment)
Post ID | int | index | ID of the post which was "Liked"
Topic ID | int | index | ID of the topic which contains the "Liked" post
Member ID | int | index | ID of the member who "Liked" the post
Date | bigint | index | Date/time of "Like"

如您所见,没有主键。这似乎很自然。唯一需要执行的功能是插入(表示“喜欢”)、删除(表示“不喜欢”)以及按帖子或提供点赞的成员按最近点赞的顺序搜索点赞。

每个条目显然都非常“独特”——因为每个人每个帖子只需要一个赞。似乎完全不需要唯一的主索引,就好像重复项(以某种方式)发生一样,我想将它们全部删除,而不仅仅是具有特定 ID 的索引。和插入一样,没有人可以喜欢同一件事两次。这些“喜欢”只会使用来自其他表的索引来选择。

然而,phpMyAdmin 现在禁止我进行任何手动编辑、复制或删除。这也很好,但促使我进一步查找没有主键的逻辑。当我找到一个 stackoverflow 答案时,普遍的看法是不需要主键的情况“非常罕见”。

所以,要么我发现了这些非常罕见的时刻之一,要么根本不那么罕见。我的场景看起来很简单和常见,所以应该有一个更明确的答案。这样一切看起来都很自然,我永远不需要实际使用主键。因此,我认为没有一个会更简单。我是否忽略了 MySQL 的任何真正神秘(并且有些神奇)的方式?或者我是否可以安全地省略一个无用的自动递增主 ID key (无论如何,它可能会在任何当前使用的 ID 之前达到其极限)至少直到我找到它们的用途(从不)?

最佳答案

您说过帖子 ID 和成员(member) ID 定义了列的唯一性(并且主题 ID 是次要的,只是为了方便而包含)。

那么,为什么不在 (Post ID, Member ID) 上设置一个主键呢?如果您已经对它们设置了 UNIQUEness 约束,那么这不是一个很大的飞跃。

CREATE TABLE `Likes` (
`PostID` INT UNSIGNED NOT NULL,
`TopicID` INT UNSIGNED NOT NULL,
`MemberID` INT UNSIGNED NOT NULL,
`Date` DATETIME NOT NULL,

PRIMARY KEY (`PostID`, `MemberID`),
FOREIGN KEY (`PostID`) REFERENCES `Posts` (`ID`) ON DELETE CASCADE,
FOREIGN KEY (`MemberID`) REFERENCES `Members` (`ID`) ON DELETE CASCADE
) Engine=InnoDB;

(我对 TopicID 的了解还不够,无法为其提出关键约束,但您可能希望添加一些。)

当然,添加任意的自动递增字段是没有意义的,但这并不意味着您不能拥有有意义的主键。

顺便说一句,我会考虑删除 TopicID 字段;如果您的外键设置正确,那么在没有它的情况下进行后<->主题查找应该是微不足道的,在这种情况下,您正在复制数据并违反关系模型!

关于mysql - 完全唯一行的表的主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24184840/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com