2012-02-12 3 views
4

フィールド内に格納できるデータ型の値を特定の整数値の範囲[0,10]に制限したいとします。MySQLデータ型の値を特定の範囲(好ましくはENUMではない)に限定してください。

PHPスクリプト内のユーザー入力時に、データの検証とサニタイズを行い、0〜10の範囲内であることを確認します。しかし、投票テーブル自体の中で何らかのデータ型または制約?

現時点では、私はUNSIGNED TINYINT内にint値を格納していますが、もちろんその範囲は0-255の範囲です。私はオプションとして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; 

私は、誰かが助けることができると思います。

答えて

8

allow_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); 
+0

感謝します。私は入力値をこのような方法で制限しようと考えていませんでした。 – leokennedy

関連する問題