Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сделать БД, дайте совет 
:(
    Опции темы
SergeBS
Дата 16.1.2006, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



Lamer George
Цитата

А почему нельзя то же самое организовать с помощью механизма "триггер+генератор"?

Можно. Только в одном случае я при создании таблицы говорю Autoincrement и ни о чем не думаю, а в другом - навешиваю триггер, генератор, и вдобавок еще с получением на клиента значения поля имею хлопоты, а получить надо, иначе свежевставленную запись потеряю. Что проще?

Fixin
Цитата

А есть статьи по базам, чтоб хотябы представление иметь "обо всем и сразу". Например разъяснение основных терминов и на кой они нужны. Ну так как?

Спроси что попроще. Я просто не помню, что у меня первым было. Давно это было. А если вообще..
Могу посоветовать Райордан "Основы реляционных баз данных", могу -Кириллова и Громова - типа "Основы SQL" и "Принципы построения РБД", как-то так. А самое правильное, наверно - Дейт "Введение в системы баз данных". А чтобы в одной статье "обо всем и сразу" - ну читай Фленова smile. Он как раз спец по "шпаргалкам для двоечников". Только учти - в его "шпаргалках" ошибки - не случайность, а закономерность.

PM MAIL   Вверх
LSD
Дата 16.1.2006, 15:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(SergeBS @ 16.1.2006, 15:09 Найти цитируемый пост)
Можно. Только в одном случае я при создании таблицы говорю Autoincrement и ни о чем не думаю, а в другом - навешиваю триггер, генератор, и вдобавок еще с получением на клиента значения поля имею хлопоты, а получить надо, иначе свежевставленную запись потеряю. Что проще?

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.
PM MAIL WWW   Вверх
batigoal
Дата 16.1.2006, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151



Цитата(SergeBS @ 16.1.2006, 16:09 Найти цитируемый пост)

Можно. Только в одном случае я при создании таблицы говорю Autoincrement и ни о чем не думаю, а в другом - навешиваю триггер, генератор, и вдобавок еще с получением на клиента значения поля имею хлопоты, а получить надо, иначе свежевставленную запись потеряю. Что проще?

Ну это-то проблема небольшая. У нас этот код автоматом генерится при построении билда. А все DML-операции осуществляются через хранимые, так что проблема возвращения значений тоже не стоит.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
SergeBS
Дата 16.1.2006, 17:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



LSD
По пунктам:
1. Мало ли что есть... Есть и FIBPlus, который это тоже полуавтоматом делает, и IBExpert... И что? "Создадим себе трудности и мужественно их преодолеем"?
2. Приведи пример, зачем нужна сквозная нумерация? Учти: наличие Autoincrement не противоречит 3НФ, а вот сквозная нумерация ...
3. Не знаю, что такое стандартный Insert. У меня в связке MS SQL - ADO никаких дополнительных средств, никаких сквозных нумераций, и проблем с получением ключей нет (свойство - return Autoincrement - default). Так что никакой принудительности, на чисто добровольных началах и с 0 хлопот. Ключ еще какой-то генерить.. Не царское это дело smile. А вот при попытке перескочить на ЖарПтицу я поимел проблемы. И с Insert и с прочим... Их можно преодолеть - см. п.1. и п.3 (твои). Но нужно ли?

Lamer George
Цитата

У нас этот код автоматом генерится при построении билда. А все DML-операции осуществляются через хранимые,

А у меня хранимки только там, где действительно надо - в каскадных удалениях и просчете статистики. Ну еще где-то есть (перенос в архив или перенумерование дела - не помню, смотреть лениво). Потому их немного.
И триггер всего один. Разницу в напряженности работы сервера улови.
Добавлено @ 17:45
LSD
Вдогонку: этак исходя из 3 пункта, заодно и от значений default давай избавимся. Разницы -то никакой smile.
PM MAIL   Вверх
LSD
Дата 16.1.2006, 18:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(SergeBS @ 16.1.2006, 17:40 Найти цитируемый пост)
Приведи пример, зачем нужна сквозная нумерация?

Репликация, хранение архивных журналов. Вообщем то это можно использовать как аналог GUID, если его самого нельзя использовать по каким либо причинам.

Цитата(SergeBS @ 16.1.2006, 17:40 Найти цитируемый пост)
Не знаю, что такое стандартный Insert.

Это тот который
Код
insert into <далее по тексту>

Если ты пишешь приложение которое должно работать с разными базами данных, то никакие специфичные для одной СУБД способы не применимы. Можно опираться только на стандарт, причем тот который поддерживает большинство СУБД. Это нужно например для серверов приложений.

Цитата(SergeBS @ 16.1.2006, 17:40 Найти цитируемый пост)
Вдогонку: этак исходя из 3 пункта, заодно и от значений default давай избавимся. Разницы -то никакой.

Триггер оставляет свободу выбора разработчику (разрешить вставлять свои значения 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.
PM MAIL WWW   Вверх
SergeBS
Дата 17.1.2006, 10:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



LSD
Цитата

Репликация, хранение архивных журналов. Вообщем то это можно использовать как аналог GUID, если его самого нельзя использовать по каким либо причинам.

Давай-ка теперь разберемся в терминах: что такое репликация? И что еще за архивные журналы? Тогда и дальше будем говорить.

Цитата

Я понимаю, когда за 5 минут пытаешься накидать простенькую програмку, тут действительно автоинкремент удобен. Но когда стоит задача реализовать, что-то нетривиальное он него толку ноль

Угу. Поэтому автоинкремент и имитируют связкой триггер+генератор, а в IBExpert для этого специальная вкладка. Даже статьи на эту тему пишут, тот же Кузьменко, например. Ну не понимают люди, что это только для простых задач. smile)
PM MAIL   Вверх
LSD
Дата 17.1.2006, 11:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 24
Всего: 538



Цитата(SergeBS @ 17.1.2006, 10:12 Найти цитируемый пост)
Давай-ка теперь разберемся в терминах: что такое репликация? И что еще за архивные журналы? Тогда и дальше будем говорить.

Цитата
Репликация данных - в распределенных базах данных - технология распространений изменений, первоначально выполненных на одной копии блока данных, на другие копии. Различают:
- синхронное тиражирование, предусматривающее практически одновременное изменение данных во всех частях базы;
- асинхронное тиражирование, предусматривающее изменение данных по-очереди.


Под архивными журналами, я имел в виду таблицы куда скидываются логи работы системы. Как правило у нас они храняться 5-10 лет. И таблицы куда скидываются все строки удаленные из рабочих таблиц. Как правило, это все храниться в отдельной базе.

Цитата(SergeBS @ 17.1.2006, 10:12 Найти цитируемый пост)
Поэтому автоинкремент и имитируют связкой триггер+генератор

Не имитируют, а используют для тех же целей (автоматическая генерация ключа). Но возможностей у триггера гораздо больше.

Цитата(SergeBS @ 17.1.2006, 10:12 Найти цитируемый пост)
а в IBExpert для этого специальная вкладка. Даже статьи на эту тему пишут, тот же Кузьменко, например.

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


--------------------
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.
PM MAIL WWW   Вверх
SergeBS
Дата 17.1.2006, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



LSD
Цитата

Репликация данных ...

Совпадает полностью с replication в MS SQL (там даже больше). Соответственно там сквозная нумерация не нужна, поскольку уже есть весь механизм репликации. А в FireBird полей autoincrement нет, соответственно и проблем с назначением на сервере-реплике того же значения, что на мастере, нет. Только я не назвал бы это сквозной нумерацией. Это просто копии записей. Никаких дополнительных нумераций нет.
Да, давно тому назад заимел статью Уфимцева "Сервис многократного 'UNDO' в многопользовательской системе, построенной на основе MS SQL-server 7.0". Если склероз не изменяет, то убрав само восстановление, получаем журналирование. Если интересно, могу закинуть. Реализуется практически без затрат на программирование. Несколько SP делают для базы все что надо. 4 дополнительных таблички.

Цитата

Исходя из наличия данной вкладки, и статьи Кузьменко, делаем вывод. Что автоинкремент, единсвенно верный путь генерации ключа.

Насчет "единственно верный" - я такого не говорил. Но вот удобен очень.
PM MAIL   Вверх
LSD
Дата 17.1.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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.
PM MAIL WWW   Вверх
YurikGL
Дата 17.1.2006, 20:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 196
Регистрация: 5.7.2005
Где: Уфа

Репутация: нет
Всего: 2



Не вижу никаких трудносте при использовании генераторов...
Если я работаю через dbКомпоненты то указываю generatorField. Если же по каким-то причинам я напрямую (через Insert into) добавляю запись, то я прямо в insert into вызываю генератор....
ИМХО, генератор - более гибкое средство, чем автоинкремент.

--------------------
 
PM MAIL WWW ICQ   Вверх
batigoal
Дата 17.1.2006, 23:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

Репутация: 1
Всего: 151




Модератор: Сообщение скрыто.



--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
SergeBS
Дата 18.1.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1111
Регистрация: 10.6.2005
Где: Владимир

Репутация: 1
Всего: 22



YurikGL
Ну сколько можно... Я не утверждал, что генератор хуже/лучше автоинкремента. Кто хочет с генераторами - да пусть, я не возражаю. Просто когда автоинкремента достаточно, и он в наличии, это быстро и удобно. И никаких dbКомпонент не надо (наверно все-таки IB smile ).
PM MAIL   Вверх
ЖораПрогов
Дата 22.2.2006, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 21.2.2006

Репутация: нет
Всего: нет



>fixin
>могу делать все это просто сам "с нуля" - не так уж сложно

Смелое заявление smile Ты с одними ... все молчу... Не даром люди за ето такие бабки ломят. Я сам так думал 5 лет назад.
А сейчас вопросы задаю.


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0585 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.