ENUM('1','2','3','4','5') 对于必须在 1 到 5 之间的产品评级来说,是一种合理的数据类型吗?
谢谢!
是的,这将是一个合适的数据类型,因为它强制执行您的域。
但是,如果您要将它们添加(或进行任何其他数学运算)在一起,则数字数据类型可能会更好。
我建议使用
TINYINT UNSIGNED NOT NULL
或者,为了获得更好的 ANSI/SQL 兼容性,请使用:
SMALLINT NOT NULL
使用整数类型,进行计算要容易得多。ENUM
不错,但有可能会搞砸,因为它是一种双字符串/整数类型(在封面下,它是一个整数,但从外面看,它是一个字符串)。事实上,假设你确实觉得有必要去 3 星或 10 星左右,迁移的痛苦会少得多。
如果您使用的是 Mysql 8+,那么您使用TINYINT
with CHECK
constraint
-- Product reviews
CREATE TABLE product_review (
product_review_id INT UNSIGNED PRIMARY KEY AUTO_INCREMENT,
user_id INT UNSIGNED NOT NULL,
product_id INT UNSIGNED NOT NULL,
unique(user_id, product_id),
rating TINYINT UNSIGNED NOT NULL CHECK (
rating > 0
AND rating <= 5
),
review VARCHAR(2047) NOT NULL,
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP
-- FOREIGN KEY (product_id) REFERENCES product (product_id) ON DELETE CASCADE ON UPDATE CASCADE.
-- FOREIGN KEY (user_id) REFERENCES user (user_id) ON DELETE CASCADE ON UPDATE CASCADE
);