Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

» InterBase и FireBird: вопросы по работе и их решение

Автор: SevereK20
Дата сообщения: 26.07.2012 11:03
Maximus777
да..вы все-таки почитайте сперва про проектирование баз данных...
ибо с такой таблицей вы будете постоянно спотыкаться и натыкаться на другие грабли.
Автор: Maximus777
Дата сообщения: 26.07.2012 11:20
SevereK20
Цитата:
да..вы все-таки почитайте сперва про проектирование баз данных...

А я совмещаю, приятное с полезным. Читаю по ходу пьесы.


Цитата:
ибо с такой таблицей вы будете постоянно спотыкаться и натыкаться на другие грабли.

Если на грабли наступать осторожно, то они прослужат долго

OXDBA
Цитата:
Интересно почему именно char, а не varchar?

Сейчас поправим. Благодаря этому вопросу узнал про разницу между этими типами.

AlexCoRu
Цитата:
Необязательно, если при создании базы указать

Спасибо за совет.
Автор: SevereK20
Дата сообщения: 26.07.2012 11:22

Цитата:
А я совмещаю, приятное с полезным. Читаю по ходу пьесы.

Значит на детали внимания не обращаете
У вас первичным ключем является поле с типом варчар. А integer для кого был придуман?)
Автор: Maximus777
Дата сообщения: 26.07.2012 11:44
SevereK20
Цитата:
У вас первичным ключем является поле с типом варчар. А integer для кого был придуман?)

Признаю, накосячил. Но мне так интереснее учиться. Что-то вроде метода военных, из фильма "Пятый элемент" - "сначала стреляем, потом вопросы задаём" . Пока всё это не пошло в промышленных масштабах, буду исправлять. Спасибо за советы.
Автор: OXDBA
Дата сообщения: 26.07.2012 11:54
офтоп, тогда следующий выстрел попадет в нормальные формы
Автор: SevereK20
Дата сообщения: 26.07.2012 12:08
Maximus777
и последний совет - не читайте сильно замудреные книги по FB на стадии изучения.
на рутрэкере прекрасно ищутся книги по запросу - проектирование баз данных, по 100 страниц. В них на живых примерах показно как, что и для чего лучше использовать.
Автор: AlexCoRu
Дата сообщения: 26.07.2012 13:00

Цитата:
Я просил сегодня большего чем я специалиста, привести мне пример когда нужен составной PRIMARY KEY из трёх полей? Он ответил: > Например номер карты, серия, магнитный код. Я тогда снова спросил - а что это даёт? Он ответил: > Уникальность связки. Тогда я пояснил - есть в IBExpert вкладка - ограничения - уникальные. Там это всё можно легко сделать. Вопрос для чего нужен именно составной PRIMARY KEY из трёх полей? И при этом необходимо исключить стандартный вместе с генератором? Он ответил: > Не знаю.

Цитата:
У вас первичным ключем является поле с типом варчар. А integer для кого был придуман?)
Varchar это, конечно, ни к чему. Но char(10) вполне сойдёт - может ключ естественный, и незачем напрягать всякие генераторы.
Автор: Maximus777
Дата сообщения: 26.07.2012 13:09
SevereK20
Цитата:
на рутрэкере прекрасно ищутся книги по запросу - проектирование баз данных, по 100 страниц. В них на живых примерах показно как, что и для чего лучше использовать.

К сожалению, не смог найти, попадаются какие-то мегабуквари по 1000 страниц и про примеры в описании ни слова. Если знаете названия таких книг, буду очень признателен за инфу.
Автор: SevereK20
Дата сообщения: 26.07.2012 13:20
Maximus777
Добегу до дома - скину название. В бумажном варианте у меня она. Но и в инете видел ее. Отпишу еще.
Автор: delover
Дата сообщения: 26.07.2012 18:29
AlexCoRu
Ну вот я же оказываюсь и.... незнайкой, нда.

Цитата:
Varchar это, конечно, ни к чему. Но char(10) вполне сойдёт - может ключ естественный, и незачем напрягать всякие генераторы.

Правда извините пожажа, ну правда правда, не знаю я галочки в бекапах. Мне сегодня рассказали почти про все, я правда думал, что бекапы делают селект с ORDER BY по Primary Key - для оптимизации индексов. Мне это было важно, чтобы все данные оставались как есть. Перекомпилируются только индексы, триггеры и процедуры. Я знаю только две галочки для перехода на 2.5 ну и галочку заменить базу. Ну и то что размер бэкапа почти равен размеру реальных данных для восстановления базы.

char(10) даже лучше - спасибо.

Добавлено:
ant0ni02004

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

Пока другую возможность ускорить одну конкретную выборку, я не знаю. Написать заново - это всегда гораздо медленнее. А медленнее почти одно и тоже что и лучше.
Автор: SevereK20
Дата сообщения: 27.07.2012 00:13
Maximus777
Увы, что-то я попутал. не нахожу ее в электронном варианте. поспрашайте, мож у знакомых кого есть - Ю.А. Шпак - Проектирование баз данных. просто как 2x2
там хоть на примере MS Access-а все, но предельно понятно суть..
Автор: Maximus777
Дата сообщения: 27.07.2012 08:50
SevereK20
Спасибо за инфу, может где попадётся. Где скачать тоже не нашёл.
Автор: eddoc
Дата сообщения: 27.07.2012 13:20
Maximus777
Читайте Х.Борри "Руководство разработчика" (а также Ковязина с Востриковым, Бондаря (тут список). Правда, она (книга Борри) написана во времена FB 1.5, но для освоения базовых понятий - самое то. Кроме того, огромная кладезь статей у Дмитрия Кузьменко(aka KDV) на ibase.ru

Если хотите вживую пообщаться с русскими разработчиками FB - сюда
Автор: Shaman2
Дата сообщения: 27.07.2012 13:55

Цитата:
Если хотите вживую пообщаться с русскими разработчиками FB - сюда


Только не новичкам. Нормального ответа на данном форуме дождаться это что-то. ИМХО
Автор: SevereK20
Дата сообщения: 27.07.2012 14:32

Цитата:
Только не новичкам. Нормального ответа на данном форуме дождаться это что-то. ИМХО

ну там на тупые вопросы даже в мануале не тыкают - просто мимо проходят. когда хороший вопрос - всегда есть ответ.
Автор: eddoc
Дата сообщения: 27.07.2012 15:20
Комрады, вопрос по проектированию.

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

Хотелось бы учитывать и ситуацию с падением сервера или элементарным обрывом коннекта.



Shaman2

Цитата:
Только не новичкам. Нормального ответа на данном форуме дождаться это что-то. ИМХО

Это вы зря. Если человек букварь осилил, то в худшем случае тынцом направят в нужную сторону, потому что 90% типичных вопросов находятся элементарным поиском по форуму.
Автор: SevereK20
Дата сообщения: 27.07.2012 15:36

Цитата:
Для служебных целей необходимо записывать каждому юзеру время дисконнекта с базой. Где это лучше делать: на сервере в триггере или на клиенте?

Ни на клиенте, ни на сервере нельзя гарантировать фиксацию отключения пользователя.
Автор: eddoc
Дата сообщения: 28.07.2012 00:20
SevereK20
А конкретнее?
Автор: SevereK20
Дата сообщения: 28.07.2012 01:09
eddoc
Я не большой спец, но задавалася уже этим вопросом.
Пример 1-на клиентском приложении при закрытии программы делать инсерт в лог о том, что пользователь покинул бд. Понятное дело, что при обрывах сети, аварийном завершении работы и т.д. метод не сработает.
Собственно говоря когда я писал я опирался на это сообщение (с другого форума)

Цитата:
1. Добавил по одному полю (назвал его Locker) к каждому документу (т.е. к соотв. таблице).
2. Создал простенькую табличку LockDoc с одним полем DocNum. Его же сделал ПК.
Тут надо, правда, отметить, что нумерация (ПК) у всех типов документов у меня в базе сквозная, т.е. нет никаких (каких бы то ни было) документов с одним номером. Но, думаю, это преодолимо.
3. При начале редактирования первым делом пытаемся вставить в таблицу LockDoc номер редактируемого документа. Если такой номер там уже есть, (это значит, что его кто-то уже редактирует), то получим нарушение ограничения ПК. Обрабатываем это исключение на клиенте, сообщая ему, что юзер такой-то уже начал изменять документ (о имени юзера см. следующий пункт).
4. Если вставка номера в таблицу LockDoc прошла успешно, то:
4.1. Транзакцию на обновление LockDoc оставляем открытой до конца редактирования документа.
4.2. В поле редактируемого документа Locker вписываем USER и завершаем эту транзакцию (для того, чтобы это имя можно было потом прочитать).
Если конкурирующий юзер нарвется на невозможность начать редактирования документа, то формируется запрос к этому документу, откуда мы и получим имя юзера - "блокировщика".
5. После окончания редактирования документа откатываем транзакцию для таблицы Locker (т.е. убираем от-туда номер заблокированного документа. Для тех, кто видит в откате плохой тон, можно Commit - Delete - Commit).
В отредактированном документе имя юзера в поле LockDoc просто оставляем - оно никому не мешает.
Автор: eddoc
Дата сообщения: 29.07.2012 17:01
SevereK20

Цитата:
Я не большой спец, но задавалася уже этим вопросом.


Многа букафф и нет ответа на поставленный вопрос.

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

Если делать хотелку на клиенте, то остается (с б-а-а-а-альши-и-и-и-ми оговорками) вариант с таймером, что считается моветоном и оправдывает себя только в случае крайней необходимости.
Автор: OXDBA
Дата сообщения: 30.07.2012 09:24
eddoc

Цитата:
Для служебных целей

Если действительно для служебных целей, то есть такой инструмент FBScanner . Он платный, но денег своих стоит.
Автор: ant0ni02004
Дата сообщения: 30.07.2012 16:00
eddoc

Цитата:
Если делать хотелку на клиенте

клиент тоже может резет нажать и перегрузиться вдруг. да, пожалуй можна из клиента таймером что-то обновлять раз в минуту по transactionID, например, и неактивность более чем 2-3 минуты считать как рассоединение. но стоит ли - вот вопрос...
З.Ы.
почему вам важно именно время разъединения с БД?
Автор: eddoc
Дата сообщения: 30.07.2012 17:35
ant0ni02004

Цитата:
почему вам важно именно время разъединения с БД?

В embedded версии при репликации знать - какая "старее"

Ну и ... познавательный процесс
Автор: ant0ni02004
Дата сообщения: 31.07.2012 00:49
eddoc
для репликации будет гораздо лучше ставить дату изменения записи
Автор: eddoc
Дата сообщения: 31.07.2012 08:26
ant0ni02004
В каждую таблю?
Автор: OXDBA
Дата сообщения: 31.07.2012 08:35
Вот ведь изобретатели велосипедов, а IBReplicator чем не угодил?
Автор: eddoc
Дата сообщения: 31.07.2012 13:55
OXDBA

Цитата:
IBReplicator чем не угодил?

А как его в клиента встроить? А как быть с распространением такого клиента на БЕСплатной основе?

Вот и занимаешься велосипедопостроением O_o
Автор: ant0ni02004
Дата сообщения: 31.07.2012 14:42
eddoc

Цитата:
В каждую таблю

если вам интересна именно последняя дата "делания чего-то с чем-то" то можна ровно одну запись в спец.таблице держать и апдейтить её из всех остальных таблиц триггерами (after insert,update,delete)

а так можна и в каждой таблице завести такую колонку. и даже три (дата изменения, ИД юзера, ИД базы)

Автор: OXDBA
Дата сообщения: 31.07.2012 15:37

Цитата:
В embedded версии

и

Цитата:
А как его в клиента встроить?

При разговоре о репликации звучит пугающе, ну да ладно, в общем случае репликация подручными средствами решается на базе IBE$LOG_TABLES и IBE$LOG_KEYS, создание триггеров для их заполнения прекрасно реализовано в IBExpert. Далее идет длинный путь по полю, усеянному граблями, в конце которого виден один из стандартных репликаторов

Цитата:
А как быть с распространением такого клиента на БЕСплатной основе

Если у вас разработчики на бесплатной основе, то ни как. Если же все-таки они хотят хотя бы еду, то вопрос выходит за рамки данной темы, хотя наше руководство посчитало, что купить репликатор дешевле, чем оплачивать работу по поддержке самописного.
Автор: eddoc
Дата сообщения: 01.08.2012 07:35
ant0ni02004

Цитата:
можна ровно одну запись в спец.таблице держать

Так и планируется: сделать что-то вроде "местного реестра" для каждого успешно подключившегося юзера, куда писать все его настройки, освободившись от ОС и машины

OXDBA

Цитата:
в общем случае репликация подручными средствами решается на базе IBE$LOG_TABLES и IBE$LOG_KEYS

Вот видите, сколько нового узнаЕшь, задавшись вполне невинным вопросом, хотя ФБ пользуюсь не один год


Цитата:
Если у вас разработчики на бесплатной основе, то ни как.

"Я в этой гостинице администратор" (с)

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465

Предыдущая тема: Сравнение двух строк


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.