【发布时间】:2023-03-24 05:47:02
【问题描述】:
最近有人建议我删除一个仅用于存储 ID 的自动递增表。我还没有这样做,我只是在探索它是否真的是a better solution than what I currently have。这会给我留下这样一张桌子:
create table tag_translations (
tag_id int not null,
language_id int not null,
tag_name varchar(255),
primary key (tag_id, language_id)
);
我将复制 tag_id,存储其他语言的标签翻译。
添加新标签时,我需要放弃在 tag_id 上使用自动增量,而是手动分配新 ID。除非它只是对现有标签的翻译,否则新一批翻译插入的 ID 必须是唯一的。
谁能用简单的英语向我解释一下这通常是如何完成的?我想到了这一点,但如果我的想法正确的话,它似乎并不比我以前的方法更干净。以下是我假设的过程:
- 从 tag_translations 中选择 tag_id
- 选择结果集中最大的数字+1
- 进行新查询(用于插入)
- 定义一些额外的策略,以确保在几乎相同的微秒内创建标签时,新 tag_id 记录的 ID 不会重复
如果这是这个过程,我认为我最好还是坚持现有的架构,即拥有一个额外的表来自动递增 id。我仍然需要做一个额外的查询来首先检查一个唯一的 id(我今天正在用一个单一的连接来换取一个插入)。如果在我的 ID 需要唯一的时候保持唯一的麻烦是我认为的那样,我可能想放弃这种方法并坚持我所拥有的。我的想法合理吗?
【问题讨论】: