Почему postgresql запускает сериалы с 1?

Название в значительной степени объясняет это. Я использую postgres в качестве базы данных, и у меня нет с этим никаких проблем, кроме этого вопроса: почему postgres начинает автоматически увеличивать типы: smallserial, serial, bigserial с 1.

По логике он должен начинаться с 0, чтобы его можно было проще использовать с массивами, списками и т.п.

Есть ли за этим какая-то логика? С другими базами так же?

P.S. Я использую pgAdmin 4 для создания таблиц, поэтому не знаю, виновато ли это в ситуации. Я имею в виду, может быть, это началось бы с 0, если бы я использовал чистый код sql для создания таблиц. Так что учтите это при ответе.

1) Он может начинаться с любого числа, которое вы выберете Создать последовательность 2) Не придавайте автоматически увеличивающимся значениям значения, они могут иметь пробелы, которые могут cycle (обтекать, если указано). Они существуют только для генерации чисел, обычно для использования в качестве PRIMARY KEY.

Adrian Klaver 26.11.2022 17:37
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
1
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Последовательности, определенные стандартом SQL:2003, начинаются с 1 по умолчанию (хотя вы можете изменить значение по умолчанию и определить последовательность, начинающуюся с 0 или другого значения, если хотите).

Это то же самое в Oracle, Microsoft SQL Server, PostgreSQL, MySQL, DB2, Informix и т. д. Все популярные базы данных SQL поддерживают своего рода генератор последовательности или столбец идентификаторов. Хотя конкретные реализации и синтаксис различаются (не все соответствуют стандарту SQL:2003), все они по умолчанию начинаются с 1.

В SQL есть и другие случаи порядковых номеров, начинающихся с 1, например ROW_NUMBER().

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

Последовательности еще меньше нуждаются в том, чтобы их рассматривали как индексы массива, поскольку не гарантируется, что значения будут последовательными. Это не номера строк.

«Эти числа не предназначены для индексов массива», но даже если бы они это сделали: в SQL индексы массива также начинаются с 1.

a_horse_with_no_name 26.11.2022 19:26

Понятно, основная причина в том, что стандарт SQL:2003. И да, я знаю, как их изменить, это занимает 2 шага, я сначала устанавливаю минимальное значение на -1, затем устанавливаю текущее значение на -1, если я напрямую пытаюсь установить оба, он говорит что-то вроде "текущее значение не может быть ниже текущего минимального значения». Но мне было просто любопытно, нормально это или нет, с точки зрения кодера, имеет смысл начинать с 0, но мне просто интересно, означает ли это что-нибудь с точки зрения менеджера базы данных. Спасибо за информацию.

ozan deniz 26.11.2022 20:06

Что ж, стандарт SQL:2003 кодифицировал то, что было обычной практикой в ​​Oracle и других основных базах данных в течение многих лет до этого.

Bill Karwin 26.11.2022 20:08

Другие вопросы по теме