数据库触发器是个坏主意吗?
根据我的经验,它们是邪恶的,因为它们可能导致令人惊讶的副作用,并且难以调试(特别是当一个触发器触发另一个触发器时).通常开发人员甚至不会考虑是否存在触发因素.
另一方面,似乎你必须FOO在数据库中创建一个新的逻辑,然后在数据库中创建一个新的最简单的地方是FOO表上的插入触发器.
我们唯一一次使用触发器就是设置简单的东西ModifiedDate.
我想将可以存储在字段中的数据类型值限制为特定范围的整数值:[0,10].
在PHP脚本中的用户输入中,我验证并清理数据以确保它在0到10的范围内.但是,有没有办法通过某种数据类型或约束来确保在投票表本身中保持这个?
目前我将int值存储在UNSIGNED TINYINT中,当然其范围为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;
Run Code Online (Sandbox Code Playgroud)
我希望有人可以提供帮助.