【发布时间】:2012-03-23 10:53:08
【问题描述】:
我想将表格行中字段的值限制在特定范围内。是否可以将我的 relationship_level 字段限制为 [0.00 到 1.00]?
目前我使用 DECIMAL(2,2),它不允许 DECIMAL(1,2),因为 M 必须 >= D。我假设 DECIMAL(2,2) 的数据类型实际上允许值从 00.00 到 99.99?
CREATE TABLE relationships (
from_user_id MEDIUMINT UNSIGNED NOT NULL,
to_user_id MEDIUMINT UNSIGNED NOT NULL,
relationship_level DECIMAL(2,2) UNSIGNED NOT NULL,
PRIMARY KEY (from_user_id, to_user_id),
FOREIGN KEY (from_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
FOREIGN KEY (to_user_id) REFERENCES users (user_id) ON DELETE CASCADE ON UPDATE NO ACTION,
INDEX relationship_from_to (to_user_id, from_user_id, relationship_level)
) ENGINE = INNODB;
有没有更好的方法来做到这一点,谁能预见任何限制?
非常感谢!
【问题讨论】:
-
如果您真的想将值从
0.00限制为1.00,您应该使用DECIMAL(3,2)数据类型和引用“稳定”(引用)表的FK,只有101行。就像您的其他问题的答案一样:Limit the value of a MySQL datatype to a specific range -
完美。我想它会涉及到与此类似的东西(FK 引用另一个限制范围的表)我只是想知道是否存在比以前的方法更“有效”的方法。非常感谢。
-
还有另一种可能性,但我没有使用它,所以我不知道有任何问题。使用
WITH CHECK OPTION定义可更新视图。但是,您必须只使用该视图而不是表(至少对于插入和更新):CREATE VIEW Syntax
标签: mysql decimal database-schema sqldatatypes