![]() |
|
Модераторы: LSD |
![]()
|
|
| SergeBS |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
Lamer George
Можно. Только в одном случае я при создании таблицы говорю Autoincrement и ни о чем не думаю, а в другом - навешиваю триггер, генератор, и вдобавок еще с получением на клиента значения поля имею хлопоты, а получить надо, иначе свежевставленную запись потеряю. Что проще? Fixin
Спроси что попроще. Я просто не помню, что у меня первым было. Давно это было. А если вообще.. Могу посоветовать Райордан "Основы реляционных баз данных", могу -Кириллова и Громова - типа "Основы SQL" и "Принципы построения РБД", как-то так. А самое правильное, наверно - Дейт "Введение в системы баз данных". А чтобы в одной статье "обо всем и сразу" - ну читай Фленова |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
1. есть RAD средства которые могут сгенерировать нужные триггеры автоматом. 2. автоинкрементные поля не позволяют делать единую нумерацию в накольких таблицах или БД 3. автоинкрементные поля сами по себе не решают проблемы получения сгенрированных ключей, а даже наоборот создают ее. Стандартный inserrt не позволяет вернуть вставленную строку. И если используя триггер у нас остается возможность прнудительно указывать ключ (вначале генерируем ключ, потом производим inserrt), то используя автоинкрементные поля такой возможности нет. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 1 Всего: 151 |
Ну это-то проблема небольшая. У нас этот код автоматом генерится при построении билда. А все DML-операции осуществляются через хранимые, так что проблема возвращения значений тоже не стоит. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
LSD
По пунктам: 1. Мало ли что есть... Есть и FIBPlus, который это тоже полуавтоматом делает, и IBExpert... И что? "Создадим себе трудности и мужественно их преодолеем"? 2. Приведи пример, зачем нужна сквозная нумерация? Учти: наличие Autoincrement не противоречит 3НФ, а вот сквозная нумерация ... 3. Не знаю, что такое стандартный Insert. У меня в связке MS SQL - ADO никаких дополнительных средств, никаких сквозных нумераций, и проблем с получением ключей нет (свойство - return Autoincrement - default). Так что никакой принудительности, на чисто добровольных началах и с 0 хлопот. Ключ еще какой-то генерить.. Не царское это дело Lamer George
А у меня хранимки только там, где действительно надо - в каскадных удалениях и просчете статистики. Ну еще где-то есть (перенос в архив или перенумерование дела - не помню, смотреть лениво). Потому их немного. И триггер всего один. Разницу в напряженности работы сервера улови. Добавлено @ 17:45 LSD Вдогонку: этак исходя из 3 пункта, заодно и от значений default давай избавимся. Разницы -то никакой |
|||
|
||||
| LSD |
|
||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Репликация, хранение архивных журналов. Вообщем то это можно использовать как аналог GUID, если его самого нельзя использовать по каким либо причинам. Это тот который
Если ты пишешь приложение которое должно работать с разными базами данных, то никакие специфичные для одной СУБД способы не применимы. Можно опираться только на стандарт, причем тот который поддерживает большинство СУБД. Это нужно например для серверов приложений.
Триггер оставляет свободу выбора разработчику (разрешить вставлять свои значения PK или нет), плюс возможность использовать составные ключи и не числовые ключи (например GUID). Я понимаю, когда за 5 минут пытаешься накидать простенькую програмку, тут действительно автоинкремент удобен. Но когда стоит задача реализовать, что-то нетривиальное он него толку ноль. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||
|
|||||
| SergeBS |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
LSD
Давай-ка теперь разберемся в терминах: что такое репликация? И что еще за архивные журналы? Тогда и дальше будем говорить.
Угу. Поэтому автоинкремент и имитируют связкой триггер+генератор, а в IBExpert для этого специальная вкладка. Даже статьи на эту тему пишут, тот же Кузьменко, например. Ну не понимают люди, что это только для простых задач. |
||||
|
|||||
| LSD |
|
||||||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
Под архивными журналами, я имел в виду таблицы куда скидываются логи работы системы. Как правило у нас они храняться 5-10 лет. И таблицы куда скидываются все строки удаленные из рабочих таблиц. Как правило, это все храниться в отдельной базе. Не имитируют, а используют для тех же целей (автоматическая генерация ключа). Но возможностей у триггера гораздо больше.
Исходя из наличия данной вкладки, и статьи Кузьменко, делаем вывод. Что автоинкремент, единсвенно верный путь генерации ключа. Раз его "все" пытаются эмулировать, даже те базы которые по убогости своей его не имеют. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
||||||
|
|||||||
| SergeBS |
|
||||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
LSD
Совпадает полностью с replication в MS SQL (там даже больше). Соответственно там сквозная нумерация не нужна, поскольку уже есть весь механизм репликации. А в FireBird полей autoincrement нет, соответственно и проблем с назначением на сервере-реплике того же значения, что на мастере, нет. Только я не назвал бы это сквозной нумерацией. Это просто копии записей. Никаких дополнительных нумераций нет. Да, давно тому назад заимел статью Уфимцева "Сервис многократного 'UNDO' в многопользовательской системе, построенной на основе MS SQL-server 7.0". Если склероз не изменяет, то убрав само восстановление, получаем журналирование. Если интересно, могу закинуть. Реализуется практически без затрат на программирование. Несколько SP делают для базы все что надо. 4 дополнительных таблички.
Насчет "единственно верный" - я такого не говорил. Но вот удобен очень. |
||||
|
|||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 24 Всего: 538 |
При репликации проблема в том, как обеспечить уникальность первичных ключей при добавлении записи и как втавить запись с указанным ключем. Первую проблему обычно решают используя GUID, но если он не доступен то sequence с шагом N способен его заменить. При использованнии триггеров, вторая проблема решается проверкой было ли явно указано значение первичного ключа.
Если статья применима не только к SQL Server, то закинь. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| YurikGL |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 196 Регистрация: 5.7.2005 Где: Уфа Репутация: нет Всего: 2 |
Не вижу никаких трудносте при использовании генераторов...
Если я работаю через dbКомпоненты то указываю generatorField. Если же по каким-то причинам я напрямую (через Insert into) добавляю запись, то я прямо в insert into вызываю генератор.... ИМХО, генератор - более гибкое средство, чем автоинкремент. --------------------
|
|||
|
||||
| batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 1 Всего: 151 |
Модератор: Сообщение скрыто. -------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
| SergeBS |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1111 Регистрация: 10.6.2005 Где: Владимир Репутация: 1 Всего: 22 |
YurikGL
Ну сколько можно... Я не утверждал, что генератор хуже/лучше автоинкремента. Кто хочет с генераторами - да пусть, я не возражаю. Просто когда автоинкремента достаточно, и он в наличии, это быстро и удобно. И никаких dbКомпонент не надо (наверно все-таки IB |
|||
|
||||
| ЖораПрогов |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 13 Регистрация: 21.2.2006 Репутация: нет Всего: нет |
>fixin
>могу делать все это просто сам "с нуля" - не так уж сложно Смелое заявление А сейчас вопросы задаю. |
|||
|
||||
![]()
|
| Правила форума "Общие вопросы по базам данных" | |
|
|
Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:
Данный форум не предназначен для:
Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение.
Полезные советы: Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | СУБД, общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |