【发布时间】:2025-12-16 06:10:01
【问题描述】:
我正在为数据库编写代码。我有一张包含机器活动日志的表格,如下所示:
CREATE TABLE Work(
id SERIAL PRIMARY KEY,
machine_ID integer NOT NULL DEFAULT 0,
start_work timestamp,
etc...
);
我知道 machine_ID 可以在 1 到 5 之间。
我的问题来了:
使用CHECK(machine_ID >= 1 AND machine_ID <=5) 有什么好处吗?
接受被污染的数据,以便以后修复可能出现的错误,甚至利用清理数据的可能性不是更好吗?
【问题讨论】:
-
我总是使用检查约束。仅在极少数情况下才允许使用无效数据
-
+1。您真的不希望数据库中有垃圾。一旦它在那里,就很难摆脱它。
-
您假设“受污染”的数据 a) 易于识别且 b) 可修复。这些事情是否属实在很大程度上取决于您的具体情况。 IE。如果机器 3 开始将自己报告为机器 4,即使检查约束也无济于事。
-
检查约束可能会让您更快地发现问题,因为它会引发错误,而存储污染数据则需要您对其进行定期检查。但是,它会消耗一些处理能力,并且会阻止存储行的任何部分(无论是否被污染),因此您可能需要围绕它对插入该数据的任何部分进行编程(例如在 XX 分钟后重试错误)。跨度>
标签: sql postgresql database-design