【发布时间】:2010-01-12 14:02:13
【问题描述】:
对于必须在 1 到 5 之间的产品评级,ENUM('1','2','3','4','5') 是否是合理的数据类型?
谢谢!
【问题讨论】:
对于必须在 1 到 5 之间的产品评级,ENUM('1','2','3','4','5') 是否是合理的数据类型?
谢谢!
【问题讨论】:
是的,这将是一种合适的数据类型,因为它强制执行您的域。
但是,如果您要将它们相加(或进行任何其他数学运算),数字数据类型可能会更好。
【讨论】:
我建议使用
TINYINT UNSIGNED NOT NULL
或者,为了更好的 ANSI/SQL 兼容性,使用:
SMALLINT NOT NULL
使用整数类型,更容易进行计算。 ENUM 还不错,但有可能会搞砸,因为它是一种双字符串/整数类型(在封面下,它是一个 int,但从外面看,它是一个字符串)。事实上,假设你确实觉得有必要去 3 星或 10 星左右,迁移的痛苦会小得多。
【讨论】:
如果您使用的是 Mysql 8+,那么您使用 TINYINT 和 CHECK 约束
-- 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
);
【讨论】: