comments
(単純化された)行id
、article_id
、user_id
およびを含むテーブルがありtext
ます。
今、私はアイデアを思いつきました。どうにかして一意のインデックスを作成しarticle_id
、データベース設計から直接二重投稿user_id
をtext
防ぐことはできますか?
text
タイプからのものTEXT
であり、インデックス付けを拒否するので、どうすればよいですか?
comments
(単純化された)行id
、article_id
、user_id
およびを含むテーブルがありtext
ます。
今、私はアイデアを思いつきました。どうにかして一意のインデックスを作成しarticle_id
、データベース設計から直接二重投稿user_id
をtext
防ぐことはできますか?
text
タイプからのものTEXT
であり、インデックス付けを拒否するので、どうすればよいですか?
「保存」ボタンを誤ってダブルクリックするのを防ぐつもりですか?または、まったく同じテキストを 1 週間後に投稿しないようにしますか? それが最初のものである場合は、最初のクリックでボタンを無効にするだけかもしれません。2 番目の場合は、テキスト フィールドでハッシュ関数を実行して、その記事でそのユーザーに一致するユーザーが既に存在するかどうかを確認する必要があります。または、テキスト フィールドのハッシュ関数であるフィールドを追加し、それを使用して一意の複合キーを作成します。ここのように
フィールドにを作成するINDEX
にはTEXT
、エラーが示唆しているように、インデックスの長さを指定する必要があります。これはテキスト フィールドの一部のみをインデックス化するため、フィールドなどの別のフィールドをインデックスの一部として使用することを検討することをお勧めします。DATE
記事名は日ごとに一意であるなどです。
INDEX UniqueArticle (article_id, user_id, text(100));
MyISAM テーブルの場合
The maximum key length is 1000 bytes. This can also be changed by changing the source and recompiling. For the case of a key longer than 250 bytes, a larger key block size than the default of 1024 bytes is used.
InODB テーブルの場合
Index key prefixes can be up to 767 bytes. See [Section 12.1.8, “CREATE INDEX Syntax”][1].
参照: http://dev.mysql.com/doc/refman/5.6/en/create-table.html