У меня есть эта база данных, которую я разрабатываю.Отрицательные целые индексы: они злые?
Он должен содержать пару десятков таблиц с записями, которые мы предоставляем (куча значений по умолчанию), а также записи, которые пользователь может добавить. Чтобы пользователь не стрелял в ногу, необходимо, чтобы он не изменял записи по умолчанию.
Существует множество способов облегчить это, но мне нравится идея предоставления защищенных записей отрицательных целых индексов, при этом резервирование 0 в качестве недопустимого идентификатора записи и предоставление положительных целых индексов пользователям.
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
Причины этого кажется хорошим:
он не использует значительно больше места
это легко понять
не требует много дополнительных таблиц для реализации
«Выберите * из таблицы» получает все соответствующие записи, без дополнительной косвенности
консервированных запись может расти в отрицательном направлении, и пользовательские записи могут расти в положительном направлении
Однако, Я относительно новичок в разработке баз данных. И после использования этого решения на некоторое время, я начинаю беспокоиться, что использование отрицательных индексов может быть плохим, потому что
Отрицательные показатели могут не поддерживаться последовательно между различными СУБД, что делает его трудно писать код, является база данных агностика
это может быть просто слишком легко ввернуть вещи вверх, вставляя что-то в RECID 0
это может сделать его трудно использовать инструменты (например, БД сетки, возможно), что ожидать целочисленные индексы с неотрицательные значения.
И, возможно, есть и другие по-настоящему очевидные причины, которые сделают это очень плохой идеей.
Так какой окончательный ответ? Являются ли отрицательные целые индексы злыми?
Я заметил, что у вас есть «AUTOINCREMENT» на этом первичном ключе, как это работает с вашей стратегией? Вы вручную вычисляете правильный первичный ключ для всех новых записей или только частных (отрицательных)? – Nicole
Только частные (отрицательные) ключи будут явно заданы. Кстати, я не знаю, что этот конкретный синтаксис SQL работает на любой СУБД. Это просто для иллюстрации. –