最近、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を手動で割り当てる必要があります。既存のタグの単なる翻訳でない限り、IDは翻訳された挿入の新しいバッチに対して一意である必要があります。
誰かが私に普通の英語で説明することができますか?私はこれについて考えましたが、もし私が思考の権利を持っていれば、私の以前のアプローチよりもきれいではないようです。ここで私はプロセスがあると仮定していますものです:
- tag_translations
- から選択TAG_IDは、結果セット+ 1
- で最も数が(挿入するための)新しいクエリを作成します選ん
- いくつかの追加を定義します。新しいタグIDレコードのIDが重複しないようにするための戦略
これがプロセスであれば、私は既存のものchemaは、自動インクリメントIDの追加テーブルを持っています。私はまだユニークなIDをチェックするために追加のクエリを実行する必要があります(私は今日、インサートのために単一の参加をトレードしています)。私のIDをユニークにする必要があるときにユニークなIDを保持するという頭痛があるとすれば、私はこのアプローチを放棄して、私が持っているものに固執したいと思うかもしれません。私の考えは響きますか?
ヘイジョエル、ありがとう。質問は、ここでテーブルを作成していませんか(tag_id_seq)? –
@Calvin:はい、私の例ではテーブルが作成されていますが、1列と1行しかありません。シーケンスの重要な部分は、テーブル全体を強調するのではなく、単一のフィールドを更新することです。このようなテーブルのように、シーケンスフィールドをそれぞれのシーケンスに対して1つの行で置き換えることができます: 'create table(seq_name varchar(20)not null、id int not null)'(InnoDBテーブルではrow-レベルロック)。私はどんな実装でも必要な状況を使用しました。 –
これは、自動増分する余分なテーブル(1列と1行も含む)を持つよりも簡単ですか?これは、これを促す質問です:http://stackoverflow.com/questions/6481505/one-column-sql-table-the-column-being-an-id-is-this-crazy –