Название в значительной степени объясняет это. Я использую postgres в качестве базы данных, и у меня нет с этим никаких проблем, кроме этого вопроса: почему postgres начинает автоматически увеличивать типы: smallserial, serial, bigserial с 1.
По логике он должен начинаться с 0, чтобы его можно было проще использовать с массивами, списками и т.п.
Есть ли за этим какая-то логика? С другими базами так же?
P.S. Я использую pgAdmin 4 для создания таблиц, поэтому не знаю, виновато ли это в ситуации. Я имею в виду, может быть, это началось бы с 0, если бы я использовал чистый код sql для создания таблиц. Так что учтите это при ответе.
Последовательности, определенные стандартом SQL:2003, начинаются с 1 по умолчанию (хотя вы можете изменить значение по умолчанию и определить последовательность, начинающуюся с 0 или другого значения, если хотите).
Это то же самое в Oracle, Microsoft SQL Server, PostgreSQL, MySQL, DB2, Informix и т. д. Все популярные базы данных SQL поддерживают своего рода генератор последовательности или столбец идентификаторов. Хотя конкретные реализации и синтаксис различаются (не все соответствуют стандарту SQL:2003), все они по умолчанию начинаются с 1.
В SQL есть и другие случаи порядковых номеров, начинающихся с 1, например ROW_NUMBER()
.
Эти числа не предназначены для использования в качестве индексов массива, поэтому нет необходимости выравнивать их с обычными массивами, начинающимися с нуля.
Последовательности еще меньше нуждаются в том, чтобы их рассматривали как индексы массива, поскольку не гарантируется, что значения будут последовательными. Это не номера строк.
«Эти числа не предназначены для индексов массива», но даже если бы они это сделали: в SQL индексы массива также начинаются с 1.
Понятно, основная причина в том, что стандарт SQL:2003. И да, я знаю, как их изменить, это занимает 2 шага, я сначала устанавливаю минимальное значение на -1, затем устанавливаю текущее значение на -1, если я напрямую пытаюсь установить оба, он говорит что-то вроде "текущее значение не может быть ниже текущего минимального значения». Но мне было просто любопытно, нормально это или нет, с точки зрения кодера, имеет смысл начинать с 0, но мне просто интересно, означает ли это что-нибудь с точки зрения менеджера базы данных. Спасибо за информацию.
Что ж, стандарт SQL:2003 кодифицировал то, что было обычной практикой в Oracle и других основных базах данных в течение многих лет до этого.
1) Он может начинаться с любого числа, которое вы выберете Создать последовательность 2) Не придавайте автоматически увеличивающимся значениям значения, они могут иметь пробелы, которые могут
cycle
(обтекать, если указано). Они существуют только для генерации чисел, обычно для использования в качествеPRIMARY KEY
.