Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Открыть новую тему     Написать ответ в эту тему

delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Да, а и если давно в голове моей пусто, то это даже более пусто чем то, что недавно стало пустым. )))
ещё и в обратном порядке можно )))

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 08:53 31-08-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ещё раз проверил

Код:
CREATE GENERATOR GEN_NEW_TABLE_ID;
CREATE TABLE NEW_TABLE (
    NEW_FIELD  INTEGER,
    NAME       VARCHAR(70)
);
 
SET TERM ^ ;
CREATE TRIGGER NEW_TABLE_BI FOR NEW_TABLE
ACTIVE BEFORE INSERT POSITION 0
as
begin
  if (new.new_field is null) then
    new.new_field = gen_id(gen_new_table_id,1);
end^
SET TERM ; ^

Забил 7 записей где 5 записей name is null а потом сделал:

Код:
select *
from
new_table
order by name

Действительно в начале было 5 полей null, однако их порядок соответствовал порядку их добавления в таблицу о чём свидетельствует поле в котором сгенерены номерочки. Это говорит о том, что для сортировки используется сравнение значений и если значения равны то дополнительно сравнивается их позиция в таблице. Сортировка на серверах всегда отличается от программной сортировки, в которой не важна исходная позиция. Ну и стало быть "то пусто, которое давно пусто - ещё более пусто".

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:53 31-08-2012
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
"Это говорит о том, что для сортировки используется сравнение значений и если значения равны то дополнительно сравнивается их позиция в таблице."
 
Не верно.
 
Ничего дополнительно не сравнивается.
"и если значения равны" - то порядок неопределен/произвольный.
 
На свежей базе - возможно будет соответствовать порядку вставки записей.
А на уже поюзаной, после тысяч вставок/изменений/удалений - может получится вразнобой.
 

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 15:18 31-08-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexPetrovich
Если Вы будете объяснять это студентам, то студенты не смогут повторить серверную сортировку. И не факт что "поюзанная база" на стабильном оборудовании и безошибочном ПО будет менять порядок в котором добавлялись записи.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 15:47 31-08-2012 | Исправлено: delover, 00:49 04-09-2012
YuriyRR



Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
 И не факт что "поюзанная база" на стабильном оборудовании и безошибочном ПО будет менять порядок в котором добавлялись записи

Вообще-то разговор шел о том, что в запросе порядок следования записей будет меняться с течением времени - и это факт. А о том что поменяется порядок в котором добавлялись записи никто и не говорил ).

Всего записей: 516 | Зарегистр. 07-06-2007 | Отправлено: 00:56 03-09-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
YuriyRR
Ну извините, я тоже бывает торможу, но я в начале подумал, что это как то связано с индексами ).

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 18:42 03-09-2012 | Исправлено: delover, 00:48 04-09-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
"и если значения равны" - то порядок неопределен/произвольный.

Вы тогда пишите сразу, что жизнь г и всё г. Про сервер сказано мало...
 
Я правдо торможу бывает, но впечатления о моём сервере превосходят то что было до YuriyRR.
 
 
Добавлено:
После ещё выше

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 18:29 04-09-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Ну и есть ли Возможность узнать на сколько больше или меньше были являются пустота и неизвестность. Обе категории подвержены влиянию времени. Неизвестное становится более известным. Пустое место может быть уже занятым. Если в таблице в одной колонки всегда будут null. А в другой таблице все же встретился 1 null. Одна таблица давно пуста, а у другой это началось впервые. В первой таблице Давно пустое значение. И если я сравню два пустых из двух равных таблиц. И это сравнение двух неизвестностей обосновано количеством, что тоже подвержено времени. Опять же - что неизвестно давно...

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 20:39 04-09-2012 | Исправлено: delover, 23:14 06-09-2012
exteris

Member
Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору
delover
Уважаемый, вы окошко твиттера с окошком этого форума не путаете случаем. Харош флудить...

Всего записей: 382 | Зарегистр. 14-04-2003 | Отправлено: 08:24 05-09-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
exteris
Спасибо за возврат. У меня на повестке следующий запрос.
 

Код:
select
  a1, a2, b1,
  update set t1.InProccess = Current_timestamp
from t1
where  
  То же самое условие апдейта что и для селекта.

Такой запрос даже не требует индексов для апдейта. Мы можем сделать каст филда и прибавить алиас но данные при этом не изменятся. Этот селект на транзакцию, если я забрал данные, то их надо отметить.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:33 08-09-2012
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Поздравляю с днём ПРОГРАММИСТА

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 18:26 12-09-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Уважаемые гуру! Помогите с триггером. Ситуация следующая, есть ключевое поле, последовательно увеличивающееся с каждой записью, одновременно с генератором. Иногда требуется удалить запись, соответственно в ключевом столбце нарушается последовательность. Знаю, что можно решить эту задачу с триггером, но опыта не хватает для создания оного. Надо перестроить ключевое поле и генератору присвоить число, которым заканчивается это поле. Например, было 1,2,3,4,5,6,7, (генератор=7) удалили 3, стало 1,2,4,5,6,7, а надо получить 1,2,3,4,5,6 (генератор=6). Гугля не помогла, вся надежда на вас.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 21:59 17-09-2012
volser

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
Это неправильный подход. В многопользовательской системе может получиться одинаковый ID. Зачем такое далеть? Чем не устраивают дырки в идах?

Всего записей: 713 | Зарегистр. 31-03-2006 | Отправлено: 23:02 17-09-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
volser
а если как-то блочить базу на время, пока не отработает содержимое триггера? Это возможно?
 

Цитата:
Чем не устраивают дырки в идах?

Для очистки совести хочется, чтоб один к одному шло.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 23:13 17-09-2012
AlexCoRu

BANNED
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777, мне не нравится, что записи вставленные позже будут иметь меньший id.

Всего записей: 911 | Зарегистр. 04-09-2003 | Отправлено: 23:40 17-09-2012
ant0ni02004

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Maximus777
обычно такое для номеров документов требуется. в этом случае просто соотв. документ почечается как удалённый, отменённый итд. если так совсем нельзя - тогда номер объявляется "свободным" (заносится в отд. таблицу хотя-бы) и захватывается след.созданным документом. а перенумеровывать это зря, бардак же будет.

Всего записей: 442 | Зарегистр. 26-10-2004 | Отправлено: 03:01 18-09-2012
Maximus777

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
AlexCoRu
Цитата:
мне не нравится, что записи вставленные позже будут иметь меньший id.

Именно это и произойдёт, если ID удалённой строки делать "свободным". А если устроить "перестройку", то всё получится вполне благообразно.
 
ant0ni02004
Цитата:
а перенумеровывать это зря, бардак же будет

Не осознаю, в чём будет заключаться бардак. Причём я даже могу исключить возможность появления двух одинаковых ID вручную, делая перерасчёт в то время, когда заведомо в базу никто не полезет.

Всего записей: 674 | Зарегистр. 27-07-2007 | Отправлено: 06:40 18-09-2012
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 Гугля не помогла, вся надежда на вас.

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

Цитата:
Для очистки совести хочется, чтоб один к одному шло.

Для очистки совести не мешало бы почитать теорию СУБД про многопользовательский режим.  

Всего записей: 1604 | Зарегистр. 01-03-2004 | Отправлено: 09:15 18-09-2012
AlexPetrovich

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

Maximus777
Кроме этой базы документы разве нигде не используются ? И даже не печатаются ?
А то сегодня документ с одним номером, завтра с другим - бардак.
 
Тут уже подсказали - завести отдельную таблицу свободных номеров, заполнить ее изначально например до милииона. Потом при работе помечать номер как занятый. После удаления/освобождения помечать опять как свободный. Очередной номер для нового документа брать процедурой из этой таблицы.
 
На форуме sql.ru было много холиваров по этой теме, поищи там если интересно.
http://www.sql.ru/forum/actualthread.aspx?bid=2&tid=259311&hl=%e4%fb%f0%ea%e8
http://sql.ru/forum/actualthread.aspx?bid=2&tid=173526&pg=-1&hl=#1444523

Всего записей: 87 | Зарегистр. 08-05-2003 | Отправлено: 09:54 18-09-2012
jonikDk



Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

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

Вопрос, какие книги про СУБД вы читали?
Как мне кажется - ни одной.

Всего записей: 1604 | Зарегистр. 01-03-2004 | Отправлено: 11:44 18-09-2012 | Исправлено: jonikDk, 11:47 18-09-2012
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » InterBase и FireBird: вопросы по работе и их решение


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru