7

フィールド内に格納できるデータ型の値を、特定の範囲の整数値 [0,10] に制限したいと考えています。

PHPスクリプト内のユーザー入力で、データを検証およびサニタイズして、データが0から10の範囲内であることを確認します。

現時点では、もちろん0〜255の範囲を持つUNSIGNED TINYINT内にint値を保存しています。オプションとしてENUMを認識しています。ただし、数値を使用する場合はお勧めできないことを読みました: http://komlenic.com/244/8-reasons-why-mysqls-enum-data-type-is-evil/

SQL:

CREATE TABLE votes (
vote_id MEDIUMINT UNSIGNED NOT NULL AUTO_INCREMENT,
article_id MEDIUMINT UNSIGNED NOT NULL,
user_id MEDIUMINT UNSIGNED NOT NULL,
user_vote TINYINT UNSIGNED NOT NULL,
PRIMARY KEY (vote_id),
FOREIGN KEY (article_id) REFERENCES articles (article_id) ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
CONSTRAINT article_uservoted UNIQUE KEY (user_id, article_id),
INDEX vote_value (article_id, user_id, user_vote)
) ENGINE=INNODB;

誰かが助けてくれることを願っています。

4

1 に答える 1

11

許可された投票値のテーブルを作成し、投票テーブルに外部キーを追加できるため、allowed_votes テーブルに存在しない user_vote 値で投票を挿入しようとすると、制約失敗エラーが発生します。

CREATE TABLE allowed_votes (
  vote_rank TINYINT UNSIGNED NOT NULL,
  PRIMARY KEY (vote_rank)
) ENGINE = InnoDB;

INSERT INTO allowed_votes( vote_rank ) VALUES(1),(2),(3),(4),(5),(6),(7),(8),(9),(10);

ALTER TABLE votes
ADD FOREIGN KEY (user_vote) REFERENCES allowed_votes (vote_rank);
于 2012-02-12T15:17:43.100 に答える