действителен ли pk как абсолютный идентификатор?(Джанго) - PullRequest
0 голосов
/ 14 марта 2012

после удаления последней модели, следующей модели, которая будет создана, будет назначена удаленная модель pk, что означает, что любые ссылки на удаленную модель теперь будут указывать на новую модель.

Так что мы должныиспользовать PK или создать UUID?например, профили пользователей, некоторые высокоуровневые профили при удалении будут указывать на совершенно новый профиль.

  • этот сайт, переполнение стека использует PK для вопросов, интересно, применимо ли то, что я пишу, здесьа также

Ответы [ 2 ]

1 голос
/ 14 марта 2012

В простейшем смысле база данных использует счетчик для поля PK и увеличивает его при добавлении новой записи.Операции удаления / обновления не изменяют счетчик.Поэтому для БД невозможно использовать одно и то же значение дважды.

РЕДАКТИРОВАТЬ: OOps, похоже, это особенность Sqlite.Подробности здесь: http://sqlite.org/autoinc.html

Чтобы процитировать документы:

Если ROWID не указан на вставке, или если указанный ROWID имеет значение NULL, тогда соответствующийROWID создается автоматически.Обычный алгоритм - дать вновь созданной строке ROWID, который больше, чем самый большой ROWID в таблице до вставки.

И:

ОбычныйОписанный выше алгоритм выбора ROWID будет генерировать монотонно увеличивающиеся уникальные ROWID, если вы никогда не используете максимальное значение ROWID и никогда не удаляете запись в таблице с наибольшим ROWID.

0 голосов
/ 07 мая 2012

Фактически, по той же ссылке вы узнаете, что создание AUTOINCREMENT на вашем первичном ключе устраняет эту неприятность.

Попробуйте:

CREATE TABLE "Pity" (
"ID" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL);
...