我想在我的应用程序的配置表中存储一行。我想强制这个表只能包含一行。
实施单行约束的最简单方法是什么?
发布于 2010-10-19 18:36:22
确保其中一列只能包含一个值,然后将其设置为主键(或应用唯一性约束)。
CREATE TABLE T1(
Lock char(1) not null,
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
我在不同的数据库中有许多这样的表,主要用于存储配置。知道如果配置项应该是一个int,那么您将只能从DB中读取int,这要好得多。
发布于 2010-10-20 02:54:51
我通常使用达米恩的方法,这对我来说一直很有效,但我还补充了一件事:
CREATE TABLE T1(
Lock char(1) not null DEFAULT 'X',
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
添加“默认的'X'",您将永远不需要处理Lock列,也不需要在第一次装入表时记住哪个是锁值。
发布于 2010-10-19 18:35:20
你可能想重新考虑这个策略。在类似的情况下,我经常发现留下旧的配置行作为历史信息是非常有价值的。
为此,您实际上有一个额外的列creation_date_time
(插入或更新的日期/时间)和一个insert或insert/update触发器,它将用当前日期/时间正确地填充它。
然后,为了获得当前的配置,您可以使用如下命令:
select * from config_table order by creation_date_time desc fetch first row only
(取决于您的DBMS风格)。
这样,您仍然可以出于恢复目的维护历史记录(如果表太大,您可以设置清理过程,但这不太可能),并且您仍然可以使用最新的配置。
https://stackoverflow.com/questions/3967372
复制相似问题