powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Правильно ли генерировать Primary Key на основе Sequence
25 сообщений из 30, страница 1 из 2
Правильно ли генерировать Primary Key на основе Sequence
    #32159350
olga1999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно вопрос в теме. И еще, есть ли в Oracle Autoincrement поля, и если да, то можно ли по ним генерировать Primary Key.
Всем заранее thanks.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159355
Roman_M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Правильно. Autoincrement типов данных нет, для эмуляции этого обычно используют Sequence+триггер на insert
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159385
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно прямо при инсерте

Код: plaintext
insert into ... values (SEQ.NEXTVAL, ...)
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159388
Фотография Scott Tiger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я б даже сказал - желательно.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159392
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я бы осмелился предположить, что заполнение первичного ключа из seq лучше делать на клиенте, а не в тригере
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159395
olga1999
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дело в том, что Sequence периодически слетают,поэтому ID неправильно генерятся. Есть ли способ против этого бороться ?
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159398
Vladimir_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что значит слетают?
нужна строгая последовательность без пропусков?
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159401
Фотография Владимир П.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я сторонник естественных ключей, которые формируются не автоинкрементом, а идентифицируют объект по какой-либо его "физической" характеристике. При таком подходе приходится строить меньше индексов, и многие запросы обходятся без операции соединения - в результате производительность больше. Неудобство в том, что в Oracle в определении граничений ссылочной целостности отсутствует фраза "ON UPDATE CASCADE" (в этом плане Interbase более удобен), и каскадное обновление приходится реализовывать триггерами.

См. статью Усова "Ключ или отмычка" на сайте www.alexus.ru .
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159421
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"Я сторонник естественных ключей, которые формируются не автоинкрементом, а идентифицируют объект по какой-либо его "физической" характеристике"

К сожалению есть вещи, где такой подход не подойдет . Например универсальную систему акцептования/верефикации документов нельзя написать, если в системе нет искусственный ключей.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159429
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я читала в доке почему нет ON UPDATE CASCADE. Прежде всего по соображениям производительности, учитывая что таблицы могут быть огромные.

В интербейсе никогда не приходилось использовать ON UPDATE CASCADE, вот ON DELETE CASCADE штука полезная.

Если в приложении возникает необходимость менять значение primary key, то это признак неудачного дизайна или не удачного выбора primary key, ИМХО.


Поскольку знначение primary key может в приложении понадобится сразу после вставки, например для создания подчиненных элементов, я бы тоже генерировала значения в приложении а не в триггере.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159431
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Начинается:) Я бы еще упомянул статью Т.Тенцера Естественные ключи против искуственных ключей .
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159435
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Владимир П.

Еще без искусственных ключей не удасться написать универсальный обработчик документов
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159469
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to Denis

Очень интересная статья!
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159491
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Violina
>Поскольку знначение primary key может в приложении понадобится сразу после вставки, например для создания подчиненных элементов, я бы тоже генерировала значения в приложении а не в триггере.

для этого делается insert .... returning ...
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159505
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 nick.

Это как такое из Формс сделать? т.е когда insert не руками пишеться, а средством разработки где-то внутри
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159515
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
to nick

для этого делается insert .... returning ...

а можно пример?

При программировании БД клиента (InterBase) я использовала триггеры on before insert и генераторы для этих целей.

Там returning не было, но можно было это имитировать запоковав insert в процедуру которая выданный при вставке ключ и возвращала.

Но была одна проблема, на клиенте еще при создании parent/child объектов нужно было обеспечивать master/details связь (клиент писали на JBuilder dbSwing DataExpress). Так что например значение MASTER.ID/CHILD.MASTER_ID требовалось еще до выполнения вставки.

Например

Создешь department
Создаешь пару сотрудников в нем - уже нужен department.id
Потом все это хозяйство посылаешь в базу

Поэтому у я решила запрашивать новое значение генератора в приложении а не в триггере.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159538
Violina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто сможет мне истолковать такой вот пример по сивенсам из Knowledge Xpert

Код: plaintext
1.
INSERT INTO purchase_orders (po_num, po_date, originator)
VALUES (po_seq.NEXTVAL, SYSDATE, USER) FROM dual;
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159539
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть два подхода к главным ключам. И тот, и другой имеют достоинства и недостатки. Ссылаться на какой-то как единственно правильный нельзя. А тем более ссылаться на книги, написанные приверженцами одной из школ. Самый главный недостаток естественных ключей - их нельзя обновлять в системах с репликацией. Второй существенный недостаток - составной главный ключ породит составной внешний с более низкой производительностью связок таблиц.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159600
nick
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2Работник
незнаю, с формс никогда не работал
2Violina
insert into department(name) values('mydepartment') retirning id into iddep
insert customer(id_department,name) values(iddep,'Violina')

примерно так
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159609
AI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Работник

В формах пишется триггер pre-insert с примерно таким текстом insert id_seq.nextval into :id from dual;

И все. Надо подумать еще над тем, чтобы поле id не было видно на форме, иначе все юзвери дадут ему какой-то потусторонний смысл и потребуют затыкать дырки.
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159810
Kr_Yury
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>я бы осмелился предположить, что заполнение первичного ключа из seq лучше делать на клиенте, а не в тригере
А где гарантия, что все используют в качестве клиента приложение, заполняющее ключевое поле? Поэтому я поддерживаю Scott Tiger

>для этого делается insert .... returning ...
Но "returning" не входит в стандарт SQL, а является расширением при использовании OCI, поэтому я использую конструкцию:
INSERT с триггером на заполнение ключа
SELECT seq.currval INTO :new_id from dual;
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159862
Aleksm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Работал я с любителями использования естетсвенных ключей.
Долго мы спорили, но каждый остался при своем мнении, даже поле того, как в один прекрасный момент пришлось во всех таблицах системы менять кода ЖД станций.
История очень поучительна.
В Советском союзе была общая система кодирования Жд станций. Затем , после раздела, каждый стал сам себе хозяином. И в один прекрасный момент МПС переприсвоили код ЖД станции, которая раньше располагалась в Казахстане, другой ЖД станции расположенной на территории РФ.
Система находилась в эсплуатации с начала 90-х годов и в ней были зарегистрированы заказы и отгрузка на Казахскую станцию. Плюс пришел новый заказ с отгрузкой на новую российскую ЖД станцию.
Вопрос к любителям естественных ключей: «Что делать?»
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159890
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Kr_Yury
"А где гарантия, что все используют в качестве клиента приложение, заполняющее ключевое поле? Поэтому я поддерживаю Scott Tiger "

Смешно даже немного. а где гарантия что оно вообще правильно тогда написано. Как позвольте спросить его тестировали. Что там еще забыли заполнить ))?
...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159893
Фотография ksv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
если с точки зрения теории к данному вопросу подходить (вопрос естественные vs искуственные PK) то сразу предлагаю копья не ломать, а проголосовать. Кого больше окажется "естественников" или "искуственников" то и определим правильным - обратное назовем ересью.

А потом все разойдемся, каждый работать над своей системой, в глубине души понимая что его вариант решения данной дискуссии - самый правильный

...
Рейтинг: 0 / 0
Правильно ли генерировать Primary Key на основе Sequence
    #32159900
Работник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"если с точки зрения теории к данному вопросу подходить (вопрос естественные vs искуственные PK) то сразу предлагаю копья не ломать, а проголосовать"

С каких это теоритические вопросы голосованием решают )). Давай те проголосуем что 2+2=5. Кто за ).

Просто пусть сторонники естественных ключей ответят как быть
1) При репликации
2) При разработке универсальных механизмов ( например акцептование и верификация и обработчики документов)
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Правильно ли генерировать Primary Key на основе Sequence
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]