6

ENUM('1','2','3','4','5') 对于必须在 1 到 5 之间的产品评级来说,是一种合理的数据类型吗?

谢谢!

4

3 回答 3

11

是的,这将是一个合适的数据类型,因为它强制执行您的域。

但是,如果您要将它们添加(或进行任何其他数学运算)在一起,则数字数据类型可能会更好。

于 2010-01-12T14:03:38.530 回答
11

我建议使用

TINYINT UNSIGNED NOT NULL

或者,为了获得更好的 ANSI/SQL 兼容性,请使用:

SMALLINT NOT NULL

使用整数类型,进行计算要容易得多。ENUM不错,但有可能会搞砸,因为它是一种双字符串/整数类型(在封面下,它是一个整数,但从外面看,它是一个字符串)。事实上,假设你确实觉得有必要去 3 星或 10 星左右,迁移的痛苦会少得多。

于 2010-01-12T14:08:42.443 回答
0

如果您使用的是 Mysql 8+,那么您使用TINYINTwith CHECKconstraint

-- 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
);


它不允许除 1、2、3、4、5 以外的值,并且还支持任何类型的数学运算,例如您可以通过简单的计算获得产品的平均评分。 在此处输入图像描述

于 2022-02-04T20:30:33.407 回答