标题可能不是很明显,我会尝试解释我想要的东西。 我在这里找到了许多像我这样的问题,但答案对我没有帮助。
假设我有这张桌子及其在视频网站中的字段:
Comments
ID | IDuser | IDvideo | comment
我想让我的主键成为ID和IDuser字段的组合。 IDuser来自用户表。 ID是auto_increment列。
但我希望它像这个例子一样工作。
1 | 2 | 3 | "this is the first comment of user 2 in the video 3"
2 | 2 | 4 | "this is the first comment of user 2 in the video 4"
3 | 2 | 4 | "this is the second comment of user 2 in the video 4"
1 | 3 | 3 | "this is the first comment of user 3 in the video 3"
你知道吗?这就像每个用户都有自己的auto_increment范围。
我想这样做,因为否则第一列会有一个非常大的数字,因为对于每个评论,你都会有一个顺序ID。
你对我有什么建议吗?
非常感谢。
答案 0 :(得分:3)
AutoIncrement 用于为表创建ID
行。每行应该拥有自己的唯一ID。
如果您想为用户注释提供相对ID ,则应创建一个新的collumn,其值应手动设置。
祝你好运! 修改强>
在你的情况下,你的表应该是这样的:
id
INT 无符号自动增量 idUser
INT 无符号索引外键 idVideo
INT 无符号索引外键 idUserComment
INT 无符号 Comment
Varchar 但我不建议您拥有相对身份证。除非它对您的应用程序有所帮助
答案 1 :(得分:1)
虽然正如jgabriel所说,你可能不应该这样做,但我确实看到了你想要实现的目标的一些价值。
但是,您可能想问自己“为什么唯一ID仍然有用?”嗯...因为每次你引用评论时,你都需要(ID,UserID)而不是(ID)。这意味着所有引用都需要在任何其他表中引用您的注释的2列....这就是说:
这样做的方法是将ID放在users表中:
Users
UserID | LastCommentID | ...
123 | 0 | ...
您将“上次评论ID”初始化为零(0),表示用户未发表任何评论。
当您为用户发布评论时,您只需执行以下操作:
UPDATE users SET LastCommentID = LastCommentID + 1 WHERE UserID = 123
SELECT LastCommentID FROM users WHERE UserID = 123
并使用该值。
您可能不必担心锁定机制,因为用户永远不能同时发布两条评论。
明显的优势,速度方面,您无需计算用户发表的评论数量,以了解用户发布的评论数量。您只需阅读LastCommentID(尽管如果您不想计算已删除或隐藏的注释,则可能没什么用处。)