Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Сравнение СУБД Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SEQUENCE vs IDENTITY
Guest
Если нужен автоинкремент по одной таблице то что лучше использовать SEQUENCE, IDENTITY , SERIAL или AUTOINCREMENT?
Допустим я использовал для:
1. MSSQL - IDENTITY
2. MYSQL - AUTOINCREMENT
3. ORACLE - SEQUENCE + trigger
4. FIREBIRD - SEQUENCE + trigger
5. POSTGRESQL - SEQUENCE + trigger (но он же поддерживает и SERIAL)
Кстати, в чем различие IDENTITY, SERIAL и AUTOINCREMENT?

Чем от них отличается SEQUENCE понятно - это сквозная нумерация по 1 и более таблиц, но чем он лучше остальных способов не понятно и не очень красиво выглядит триггер с ним на каждую таблицу.
5 янв 12, 22:56    [11863363]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 54849

SEQUENCE vs IDENTITY
4. FIREBIRD - SEQUENCE + trigger

Не нравится писать собственные триггера - используй AUTOINCREMENT, сервер нужный триггер
сам создаст.

Posted via ActualForum NNTP Server 1.5

5 янв 12, 23:03    [11863378]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SEQUENCE MS SQL
Guest
автор
Допустим я


1. MSSQL - SEQUENCE + DEFAULT CONSTRAINT

автор
по одной таблице ... на каждую таблицу


Вы, уж, определитесь в постановке задачи...
5 янв 12, 23:14    [11863402]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SEQUENCE vs IDENTITY
Guest
SEQUENCE MS SQL
автор
Допустим я


1. MSSQL - SEQUENCE + DEFAULT CONSTRAINT

автор
по одной таблице ... на каждую таблицу


Вы, уж, определитесь в постановке задачи...

http://msdn.microsoft.com/en-us/library/ff878091(v=SQL.110).aspx
SEQUENCE появиться только в SQL Server 2012. И что значит DEFAULT CONSTRAINT? В SQL Server 2012 можно будет SEQUENCE писать в DEFAULT и он сам будет автоинкремениться при инсертах?
К слову в Oracle, Firebird и PostgreSQL так сделать нельзя, нужен обязательно триггер.

Постановки задачи как таковой нет - есть необходимость разобраться в каком случае что лучше?
5 янв 12, 23:30    [11863453]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
Warstone
Member

Откуда:
Сообщений: 4896
Блог
SEQUENCE vs IDENTITY
5. POSTGRESQL - SEQUENCE + trigger (но он же поддерживает и SERIAL)
SERIAL + DEFAULT в INSERT'е. Это не создает триггера.
5 янв 12, 23:36    [11863463]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
Ы
Guest
К слову в Oracle, Firebird и PostgreSQL так сделать нельзя, нужен обязательно триггер.

В PostgreSQL триггер не нужен: там есть псевдотип serial, который сам (почти) все делает. При создании колонки, напр., id serial будет создана последовательность, из которой автоматически будут браться значения. Технически это будет id default nextval('sequence_name').
5 янв 12, 23:37    [11863467]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SEQUENCE MS SQL
Guest
SEQUENCE vs IDENTITY
В SQL Server 2012 можно будет SEQUENCE писать в DEFAULT и он сам будет автоинкремениться при инсертах?


http://msdn.microsoft.com/en-us/library/ff878370(v=sql.110).aspx Example D

SEQUENCE vs IDENTITY
Постановки задачи как таковой нет


Когда будет - приходите...
5 янв 12, 23:38    [11863472]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SERG1257
Member

Откуда:
Сообщений: 2934
SEQUENCE vs IDENTITY
но чем он лучше остальных способов не понятно
Тем что это механизм генерации уникальных id не привязанный к таблицам и полям.
SEQUENCE vs IDENTITY
не очень красиво выглядит триггер с ним на каждую таблицу.
А явно в инсерте sequence.nexval прописать религия не позволяет?
5 янв 12, 23:43    [11863480]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
SEQUENCE MS SQL
Guest
SERG1257
А явно в инсерте sequence.nexval прописать религия не позволяет?


Когда программисту надоедает работать руками - он начинает работать головой. ((с) Не моё)
5 янв 12, 23:48    [11863494]     Ответить | Цитировать Сообщить модератору
 Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
softwarer
Member

Откуда: 127.0.0.1
Сообщений: 67534
Блог
SEQUENCE vs IDENTITY
Чем от них отличается SEQUENCE понятно - это сквозная нумерация по 1 и более таблиц, но чем он лучше остальных способов не понятно

Возможность "оторвать" значение от таблицы даёт свободу манёвра, позволяющую легче реализовывать некоторую функциональность. Типовые варианты использования:

  • Создание/редактирование на клиенте мастер-детальных данных без длинных транзакций
  • Сквозная нумерация однородных сущностей, распределённых по нескольким таблицам
  • Генерация номеров документов
  • Извращения типа "обойти номера записей, вставленных руками"

    SEQUENCE vs IDENTITY
    и не очень красиво выглядит триггер с ним на каждую таблицу.

    Это да. Какого хрена ещё во времена какого-нибудь Oracle 7 не сделали DEFAULT SEQ_NAME.NEXTVAL, я не понимаю и вряд ли пойму.
  • 6 янв 12, 11:07    [11864119]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    SERG1257
    А явно в инсерте sequence.nexval прописать религия не позволяет?

    У такого решения есть изрядные недостатки с точки зрения качества кода.
    6 янв 12, 11:10    [11864122]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    Shtock
    Member

    Откуда: СПб
    Сообщений: 3049
    > У такого решения есть изрядные недостатки с точки зрения качества кода.

    а переключение контекста в триггере это хорошее качество кода? Каков по Вашему мнению тогда лучший способ вызова nextval в Oracle?
    10 янв 12, 15:16    [11879326]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    Shtock
    а переключение контекста в триггере это хорошее качество кода?

    Переключение контекста - это вопрос производительности. К качеству кода (в том смысле, в котором обычно понимается это слово) это отношения не имеет.

    Shtock
    Каков по Вашему мнению тогда лучший способ вызова nextval в Oracle?

    Зависит от контекста. В разных ситуациях я их использовал пожалуй что все которые могу придумать, и каждый из них обладает недостатками, позволяющими легко построить контрпример "когда этот способ явно не лучший".
    10 янв 12, 16:41    [11880178]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    Shtock
    Member

    Откуда: СПб
    Сообщений: 3049
    Я, например, очень полюбил nextval прямо в select, когда использую insert all. Там без него плохо....
    10 янв 12, 17:02    [11880345]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    связанные по FK
    Guest
    Shtock
    Я, например, очень полюбил nextval прямо в select, когда использую insert all. Там без него плохо....

    Для вставки из запросов в таблицы связанные по FK?
    10 янв 12, 17:06    [11880366]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    Yo.!
    Guest
    softwarer
    Зависит от контекста. В разных ситуациях я их использовал пожалуй что все которые могу придумать, и каждый из них обладает недостатками, позволяющими легко построить контрпример "когда этот способ явно не лучший".

    здесь играем, здесь не играем, а тут мы рыбу заворачивали (с)
    и это в контексте качества кода !?
    10 янв 12, 17:06    [11880369]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    Yo.!, не приходило ли Вам когда-нибудь в голову, что, например, ETL-загрузка данных, OLTP с процедурной оболочкой над таблицами и, например, толстенный клиент вообще без логики на сервере - это немного разные контексты (не говоря уже о том, что часто разные проекты и разные заказчики), и применять в них один универсально плохой метод будет только... ну в общем кое-кто и будет.
    10 янв 12, 17:17    [11880431]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    Shtock
    Member

    Откуда: СПб
    Сообщений: 3049
    >связанные по FK - аха, именно для их. Для моих задач обычное дело когда одним инсертом данные уходят в 3-6 таблиц.
    10 янв 12, 22:53    [11881775]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    kdv
    Member

    Откуда: iBase.ru
    Сообщений: 30290
    softwarer
    и применять в них один универсально плохой метод будет только... ну в общем кое-кто и будет.


    буквально на днях наблюдал базу от InterBase 4.0. Там несколько генераторов инкрементируются в
    - некоторые только в триггерах
    - некоторые только в процедурах
    - некоторые одновременно в нескольких триггерах (для разных таблиц)
    - некоторые ни в триггерах, ни в процедурах (а только в приложении), т.е. по базе их назначение понять нельзя.

    я понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу.
    11 янв 12, 03:57    [11882515]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    kdv
    я понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу.

    Не понимаете - значит, вполне вероятно, зря городил. С другой стороны, например, в первый раз я отступил от принятой в конторе практики генерации id в триггерах, когда требовалось массово грузить в приложение некие данные со стороны, и отказ от этих триггеров увеличил скорость загрузки в пять-десять раз. Полагаете, был неправ?
    11 янв 12, 11:06    [11883350]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    Andron
    Member

    Откуда: Cherepovets
    Сообщений: 1816
    В Informix используется Serial, можно еще Sequence, но когда есть Serial зачем использовать что то еще (если нужны последовательные значения)? Не надо городить триггеры, все просто - объявил поле Serial и получай готовые значения.
    19 янв 12, 21:24    [11935987]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    SEQUENCE vs IDENTITY
    Guest
    Andron, вполне логично. А насколько скорость serial отличается от аналогичной через SEQUENCE + trigger или SEQUENCE в INSERT-запросе?

    softwarer
    kdv
    я понимаю, что это все разные методы использования генераторов. Но не понимаю, зачем разработчику потребовалось городить такую кашу.

    Не понимаете - значит, вполне вероятно, зря городил. С другой стороны, например, в первый раз я отступил от принятой в конторе практики генерации id в триггерах, когда требовалось массово грузить в приложение некие данные со стороны, и отказ от этих триггеров увеличил скорость загрузки в пять-десять раз. Полагаете, был неправ?

    1. Отключили триггеры и импользовали SEQUENCE в инсертах?
    2. Или вообще отказались от SEQUENCE?
    19 янв 12, 22:04    [11936112]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    SEQUENCE vs IDENTITY
    1. Отключили триггеры и импользовали SEQUENCE в инсертах?
    2. Или вообще отказались от SEQUENCE?

    Отключил триггеры, сделал сиквенсам increment by 1000 и формировал данные для direct load-а.
    20 янв 12, 14:20    [11939497]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    SEQUENCE vs IDENTITY
    Guest
    softwarer
    SEQUENCE vs IDENTITY
    1. Отключили триггеры и импользовали SEQUENCE в инсертах?
    2. Или вообще отказались от SEQUENCE?

    Отключил триггеры, сделал сиквенсам increment by 1000 и формировал данные для direct load-а.

    Т.е. в интервалах по 1000 нумеровали уже сами?
    А установить кэш не пробовали ALTER SEQUENCE seq CACHE 2000; или вообще нумеровать самому без сиквенсов через оконные функции?
    20 янв 12, 14:44    [11939796]     Ответить | Цитировать Сообщить модератору
     Re: SEQUENCE vs IDENTITY vs SERIAL vs AUTOINCREMENT  [new]
    softwarer
    Member

    Откуда: 127.0.0.1
    Сообщений: 67534
    Блог
    SEQUENCE vs IDENTITY
    Т.е. в интервалах по 1000 нумеровали уже сами?

    Да.

    SEQUENCE vs IDENTITY
    А установить кэш не пробовали

    А смысл? Кэш регулирует быстродействие сервера, а целью в данном случае было избежать огромного количества тупых синхронных запросов к серверу "за айдишниками".

    SEQUENCE vs IDENTITY
    или вообще нумеровать самому

    А нафига такое счастье?
    20 янв 12, 14:50    [11939862]     Ответить | Цитировать Сообщить модератору
    Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
    Все форумы / Сравнение СУБД Ответить