Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Вниз

Иерархическая база данных, с возможностью вставки записий ...   Найти похожие ветки 

 
SmileCoder ©   (2005-11-22 11:39) [0]

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

 Задача такова существует некая основная иерархическая таблица:
Id индивидуалный номер
Код строки
Номер по порядку (PP)
Пораметр 1
Пораметр 2
Пораметр 3
.......
Сумма с запроса из таблицы 2
Сумма с запроса из таблицы 3
Примечание


Возникает проблема, как сделать так чтобы можно былобы вставлять строки в любую позицию списка. Все строки нумируются значением (PP) по этому полю идет и сортировка данных.
Делал следущее на события BeforeInsert таблицы вешал функцию которая генерировала мне номер вставляемой строки, затем в событии AfterPost ПРОПИСЫВАЛ ФУНКЦИЮ ПЕРЕИНДЫКСАЦИИ НИЖЕСТОЯЩИХ СТРОК, то есть значение PP увеличевалось на 1.
Но вот в чем проблема, когда начинает выполняться данное событие, приложение уже фильтрует по PP и получается двойное значение встовляемого поля :(
Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?


 
Ega23 ©   (2005-11-22 11:41) [1]

У тебя всегда Order By есть. И тебя, по-идее, не должно колыхать, каким образом физические данные лежат.


 
Sergey13 ©   (2005-11-22 11:45) [2]

2SmileCoder ©   (22.11.05 11:39)
>Возможноли вообще реализовать вставку записи в любое место бд чтобы оно там четко остовалось а не сползало в конец списка?
Нет, нельзя. Разберись хотябы в терминологии.


 
sniknik ©   (2005-11-22 12:13) [3]

если сортировка все одно есть по полю то сделай его типа double(большое дробное), добавляй запись со значением  например автоинкремент * 10 (шаг сделать побольше), а вставляй (Insert) со значением среднего от тех записей между которыми надо вставить.
т.е. надо вставить между pp = 10 и 20 значит (10+20)/2 = 15, при сортированом по этому значению запись будет выглядеть именно вставленной...

тока не увлекайся "вставкой", а то в коне концов придеш к варианту когда снеднее стремиться к 0, или время от времени переинициализируй в таблице эти значения новым шагом только уже не от автоинкремента.


 
ANB ©   (2005-11-22 12:15) [4]


> SmileCoder ©   (22.11.05 11:39)

Можно. Но нужно попрыгать :
1. Запоминаем PP строки, после которй должна идти вставка
2. Генерим PP новой строки
3. Выполняем update Таблица set PP = PP + 1 where PP >= PPновой строки.
4. Вставляем строку.

Все это жутко нехорошо.


 
msguns ©   (2005-11-22 12:44) [5]

Опять двадцать пять ! Вместо того, чтобы огласить "историю болезни", нам предлагают перечень инструментов, которыми делалась операция. И потом спрашивают "как спасти больного ?".
Где описание предметной области ? Где хотя бы концептуально схема решения (модель данных) ? Что значит "иерархическая база данных" ? Любую БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".


 
Sergey13 ©   (2005-11-22 12:57) [6]

2[5] msguns ©   (22.11.05 12:44)
>БД, содержащую отношения "один-ко-многим" в принципе можно назвать "иерархической".
Судя по сабжу, можно даже просто таблицу в которой предполагается некое упорядочивание (т.е. иерархия в некотором смысле).


 
ANB ©   (2005-11-22 13:05) [7]


> msguns ©   (22.11.05 12:44) [5]

Забей. Товарищь крут и хочет делать так. Пусть делает. Потом будет 2 пути :
1. Понаступав на грабли научится программировать.
2. Не научится программировать еще долго, у нас будет меньше конкуренции.


 
evvcom ©   (2005-11-22 14:36) [8]

D6 и ADO - это не базы данных! :o) В них ничего нельзя вставить.


 
SmileCoder ©   (2005-11-22 17:02) [9]

Спасибо.


 
SmileCoder ©   (2005-11-22 22:12) [10]

Но все таки походу переиндексация PP только этот выход я вижу
Sergey13 ©  вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.  
На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
аля
1
1.1
1.2
1.2.1
2
2.1
2.2
2.2.1

ANB ©  Спасибо мой ход мысли был примерно такойже.


 
ANB ©   (2005-11-22 22:40) [11]


> SmileCoder ©   (22.11.05 22:12) [10]

Вообще то это позиционное эрзац-дерево. Так на кой это тебе надо ? Еще тип БД неплохо бы указать.


 
Smilecoder ©   (2005-11-22 22:59) [12]

Все построено на Access, эта база потом подключена через ODBC и в дальнейшем используется для просмотра через веб интерфей, на делфи же пишу Упраление и заполнение данными этой бд. Чтобы дважды не делать выборку из базы и в модули управления и в веб интерфейсе все решил сделать в Делфи через ADOTabel и уже там формировать основную таблицу в древовидном виде, чтобы потом только по запросу выводить дополнительные связные данные по индексному полю ID.


 
ANB ©   (2005-11-22 23:18) [13]

Исходная таблица с парентовым деревом ?


 
ANB ©   (2005-11-22 23:21) [14]

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


 
Smilecoder ©   (2005-11-22 23:28) [15]

Ну да, структуру я расписал выше. основной талицы
ID                              индификатор строки
PP                              порядковый номер  
Parent                        родитель  
FlagSumm                   флаг сумарной строки
Code_Item                  Код строки
Name_work                 Наименование работы
Executor                     исполнитель
Ground                       основание
Primary_budjet             первоночальный бюджет  
Modify_budjet              бюджет с изменениями
Contracts                    Сумма контрактов по этому ID из
                                талицы  Contracts
 
Sum_act                     Сумма по актам
Sum_pay                     Сумма платежек  
Rest_Pay                     Остаток оплат


 
Smilecoder ©   (2005-11-22 23:29) [16]

ну это вобщемто тема, но выходит все же двойная работа и там и там данные переколбашывать


 
ANB ©   (2005-11-23 00:29) [17]


> Smilecoder ©   (22.11.05 23:29) [16]

1. Это будет уже не двойная работа, так как с клиента ты просто переложишь данные в таблицу сразу с нужными PP.
2. Не вижу - для чего тебе тут дерево ? На что ссылается Parent ?


 
Sergey13 ©   (2005-11-23 09:16) [18]

2 [10] SmileCoder ©   (22.11.05 22:12)
>вот не знаю, как можно программировать если наперед знать что "нет нельзя". А если надо, то можно и нужно.  
Я тебе честно ответил на твой вопрос. "вставка записи в любое место бд чтобы оно там четко остовалось " - это утопия. Записи вообще вставляются в таблицы, а не в базу, т.е. в любое место базы вставить невозможно. Физическое расположение записи в таблице не должно тебя волновать вообще. Волновать тебя должно расположение записи в возвращаемом наборе данных, а это далеко не эквивалент таблицы и делается очень просто независимо от физического расположения.

>На счет терменалогии как вы еще высветите древовидную структуру в одном стрингриде
А я таким делом и заниматься не буду. Я нормально спроектирую таблицу и воспользуюсь предназначенным для деревьев компонентом.


 
msguns ©   (2005-11-23 09:16) [19]

ИМХО, полное непонимание клиент-серверной "идеологии", "шляпочное" знакомство с методами доступа, но все это "обернуто" в дремучее упрямство и непомерное самомнение.
Ну хоть бы почитал что-то, а ?



Страницы: 1 вся ветка

Форум: "Базы";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.5 MB
Время: 0.048 c
1-1135014105
novarm44
2005-12-19 20:41
2006.01.22
состояние кнопки мыши


2-1136673586
KvORubin
2006-01-08 01:39
2006.01.22
Мастера ХЕЛП !!! Как получить список имён файлов из каталога???


14-1135430256
AnD1
2005-12-24 16:17
2006.01.22
Передача парметров cgi-скрипту...


2-1136494842
n85sergey
2006-01-06 00:00
2006.01.22
ком порт


6-1129030407
Tonich
2005-10-11 15:33
2006.01.22
FTP





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский