我正在设计一个数据库,需要包含几十个表格,其中有我们提供的记录(一些默认值),也有用户可以添加的记录。为了防止用户自己给自己惹麻烦,必须禁止他修改默认记录。
有很多方法可以实现这一点,但我喜欢使用保护记录负整数索引的想法,同时将0作为无效的记录ID保留,并为用户记录分配正整数索引。
有很多方法可以实现这一点,但我喜欢使用保护记录负整数索引的想法,同时将0作为无效的记录ID保留,并为用户记录分配正整数索引。
CREATE TABLE t1 (
ixt1 integer AUTOINCREMENT,
d1 double,
CONSTRAINT pk_ixt1 PRIMARY KEY (ixt1),
CONSTRAINT ch_zero CHECK (ixt1 <> 0)
);
-2 | 171.3 <- canned record
-1 | 100.0 <- canned record
1 | 666.6 <- user record
以下是这种方法看起来不错的原因:
它不会使用更多的空间
很容易理解
不需要大量额外的表来实现
"select * from table" 可以获取所有相关记录,没有额外的间接性
预设记录可以向负方向增长,用户记录可以向正方向增长
然而,我对数据库设计还比较陌生。在使用这种解决方案一段时间后,我开始担心使用负索引可能不好,因为
不同的DBMS可能不一致地支持负索引,使得编写与数据库无关的代码变得困难
通过在recid 0处插入某些内容,很容易搞砸事情
使用工具(例如db grids)可能很难使用带有非负值的整数索引。
也许还有其他一些非常明显的原因,这将使这成为一个非常糟糕的想法。
那么什么是最终答案?负整数索引是邪恶的吗?
AUTOINCREMENT
,这对你的策略有什么影响吗?你是手动计算所有新记录的正确主键,还是只为私有(负数)记录计算呢? - Nicole