最近有人建議我刪除僅用於存儲ID的自動遞增表。我還沒有走這個,我只是在探索它是否實際上是a better solution than what I currently have。這將使我有這樣的一個表:處理非自動遞增ID的策略
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。除非它只是對現有標籤的翻譯,否則該標識對於新批次的翻譯插入內容必須是唯一的。
有人能用簡單的英語向我解釋這是如何典型地完成的嗎?我想到了這一點,但如果我的想法正確的話,它似乎沒有比我以前的方法更清潔。這裏就是我假設的過程是:
- 從tag_translations選擇TAG_ID
- 選擇在結果集中+ 1
- 最多做一個新的查詢(插入)
- 定義一些額外的確保在新標籤記錄的ID不會重複的情況下,標籤的創建時間差不多相同微秒
如果這是一個過程,我認爲我最好堅持使用現有的s chema有一個額外的表來自動增加id。我仍然需要做一個額外的查詢,以便首先檢查一個唯一的ID(我今天正在交易一個單一的連接)。如果我想讓自己的身份標識獨一無二的頭痛是我的想法,那麼我可能會放棄這種方法並堅持我所擁有的。我的想法是什麼?
哎喬爾,非常感謝。問題是,你是不是在這裏創建一個表格(tag_id_seq)? –
@Calvin:是的,在我的例子中創建了一個表格,但它只有1列和1行。一個序列的重要部分並不是把整個表都用到它上面,而是更新一個字段。您可以將序列字段隱藏在其他地方,例如像這樣的表格,每個序列都有一行:'create table(seq_name varchar(20)not null,id int not null)'(InnoDB表使用行 - 級別鎖定)。我已經使用了所需的任何實現。 –
這比擁有一個自動增量的額外表格(也有1列和1行)更簡單嗎?這是prompte這一個的問題:http://stackoverflow.com/questions/6481505/one-column-sql-table-the-column-being-an-id-is-this-crazy –