Mar*_*tin 73 sql-server singleton database-design
我想在我的应用程序的配置表中存储一行.我想强制说这个表只能包含一行.
实施单行约束的最简单方法是什么?
Dam*_*ver 90
您确保其中一列只能包含一个值,然后将其作为主键(或应用唯一性约束).
CREATE TABLE T1(
Lock char(1) not null,
/* Other columns */,
constraint PK_T1 PRIMARY KEY (Lock),
constraint CK_T1_Locked CHECK (Lock='X')
)
Run Code Online (Sandbox Code Playgroud)
我在各种数据库中有许多这些表,主要用于存储配置.知道如果配置项应该是int,那么你只会从数据库中读取一个int,这样会更好.
小智 48
我通常使用Damien的方法,这对我来说一直很好,但我还添加了一件事:
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')
)
Run Code Online (Sandbox Code Playgroud)
添加"DEFAULT'X'",您将永远不必处理Lock列,并且不必记住第一次加载表时哪个是锁定值.
pax*_*blo 14
您可能想重新考虑这个策略.在类似的情况下,我经常发现保留旧的配置行以获取历史信息是非常宝贵的.
为此,您实际上有一个额外的列creation_date_time(插入或更新的日期/时间)和插入或插入/更新触发器,它将使用当前日期/时间正确填充它.
然后,为了获得当前配置,您可以使用以下内容:
select * from config_table order by creation_date_time desc fetch first row only
Run Code Online (Sandbox Code Playgroud)
(取决于您的DBMS风味).
这样,你仍然可以维护恢复目的的历史记录(如果表格太大但你不太可能建立清理程序),你仍然可以使用最新的配置.
| 归档时间: |
|
| 查看次数: |
19946 次 |
| 最近记录: |