1

OK、次のようなテーブルがあります。

Post
 ˪ Id
 ˪ Version
 ˪ Title
 ˪ Content

アイデアは、単一の投稿を複数回行うことができますが、バージョンが異なるため、ID とバージョンを合わせて主キーにするということです。

私の質問はこれです: Id を自動インクリメントしたいと思います。このような設定でこれは可能ですか?たとえば、投稿の 2 番目のバージョンを挿入すると、問題が発生しますか?


ここでいくつかのことをクリアする必要があるようです。私がしたいのは、次のようなことです:

INSERT INTO posts VALUES (NULL, 0, "A title", "Some content");

これにより、自動インクリメントされた ID を持つ新しい投稿が作成されます。ID 7 を取得したとしましょう。新しいバージョンを作成したいと思います。

INSERT INTO posts VALUES (7, 1, "A new title", "Some adjusted content");

それはうまくいくでしょうか?または、ID は引き続き自動インクリメント値を取得しますか? そして、それが機能したとしても、データベース設計の観点などからしてすべきではないことを行っているのでしょうか?

4

4 に答える 4

1

次のサンプル データを考えてみましょう。

id  version  title  content   
1     1        t1     c1
2     1        t2     c2

ユーザーが投稿のタイトルとコンテンツを変更し、自動インクリメントされた ID を持つ新しい行を作成します。

3     2        t3     t3

これはある投稿のバージョン 2 ですが、投稿 1 (ID 1 のエントリ) の新しいバージョンなのか、投稿 2 (ID 2 のエントリ) の新しいバージョンなのかはわかりません。

投稿を識別するために何かが必要です。Tobias が回答で提案しているように、テーブルに post_id 列を追加できます。

さらに、自動インクリメントされた id を完全に削除し、複合主キー (post_id,version) を使用することもできます。主なポイントは、自動的にインクリメントされない post_id を使用して、次のようなデータを取得できるようにすることです。

post_id  version  title  content   
1           1        t1     c1
2           1        t2     c2 
1           2        t3     t3

ここで、3 行目が投稿 1 の新しいバージョンを表していることは明らかです。

于 2010-03-10T11:53:38.073 に答える
1

私は次のようにします:

Post:  
- ID (your primary key with auto_increment)
- post_id (this is which post you mean)
- version
- title
- content

新しい ID は、このデータセットの一意の ID のみを指定します。post_id は、このデータセットが属する投稿を指定し、バージョンはエントリのリビジョンを表します。

于 2010-03-10T11:06:14.800 に答える
0

Idある種のバージョン インジケーターとして使用しないのはなぜですか。そうしないと、DB 設計の欠陥と見なされる同じ目的を果たす 2 つの列ができてしまいます。

于 2010-03-10T09:48:45.517 に答える
0

ID とバージョンが一緒になってエントリを識別する複合主キーを使用します。その後、id を auto_increment できます。新しいエントリを追加すると、自動的にインクリメントされます。投稿を修正する場合、id とリビジョンを明示的に定義すると、id はインクリメントされません。

于 2011-09-27T01:40:09.893 に答える