![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Здравствуйте!
В БД есть таблицы ТД и ТЮ с некими данными, а также ТС где должны храниться связи отдельных записей ТД с записями ТЮ. В программе есть 3 окна - 1.Каталог берущий данные из ТД, 2.Редактор конкретной записи ТД, 3.Список выбора связей этой записи с некими другими данными при помощи checkbox сохраняется в БД в таблицу ТС. Юзер открывает 1.Каталог и выбирает нужную запись, открывает 2.Редактор и правит там данные - всё очевидно. Вопрос со списком выбора - как его правильно реализовать? как правильно построить логику сохранения списка и хранения выбранных связей в БД при условиях, что: - обе таблицы ТД и ТЮ изменяются пользователем - дополняются, редактируются и удаляются. - при открытии в редакторе записи ТД, юзер должен видеть полный список ТЮ с возможностью поставить напротив каждой записи галочку. - второстепенно - желательно уменьшить объём хранимых данных в БД и упростить саму БД по возможности. PS Как быстрее работает - если хранить каждую связь таблиц отдельной записью в отдельной "таблице связей ТС" или если хранить в одном поле таблицы ТД весь список и затем парсить его в БД при необходимости (во втором случае отсутствует необходимость в поиске-выборке, отсутствует таблица и все данные ТС)? |
#2
|
||||
|
||||
![]() Начнем с конца. Если количество связей не исчисляется тысячами, то без разницы как вы будете хранить их, вертикально или горизонтально. Но вот удобнее и перспективнее все-же вертикальный вариант, в этом случае вы можете использовать ресурсы БД.
По первому вопросу складывается впечатление, что вы не знаете о реализации в дельфи связи данных через мастер-детайл. Или я чего-то не понял? Жизнь такова какова она есть и больше никакова. Помогаю за спасибо. |
#3
|
|||
|
|||
![]() Кол-во связей исчесляется кол-вом записей в каталоге ТЮ, которых и правда всего-то будет ну максимум 100-300
"Вертикальный метод хранения" - то есть создание ещё одной таблицы ТС с пересекающимися значениями (связями) - это конечно преумножение сущностей, тк только ради указания связи приходится хранить (автоинкрементальный номер записи в ТС, номер ТД, номер ТЮ, возможно ещё булеан вкл/выкл) - не слишком ли это много ради указания связи? Связи данных через мастер-детайл возможно не знаю или не понимаю о чём Вы говорите... объясните, пожалуйста. И таки главный вопрос - как данную задачу принято реализовывать? как Вы реализуете? |
#4
|
|||
|
|||
![]() В частности пока не очень понял как записывать выбранные значения в БД в таблицу ТС? Подробнее - чтобы отобразить пользователю список всех ТЮ - в БД при помощи хранимой процедуры склеиваем ТЮ и ТС, из ТС берутся значения "связь да/нет". Отправили в интерфейс - получили таблицу в которой видно все ТЮ и напротив используемых стоит галочка из ТС. Всё понятно. Далее юзер ставит/убирает галочки в интерфейсе показывая какие связи ему нужно записать в БД - понятно. А вот как это дело обратно записать в БД непонятно
![]() |
#5
|
|||
|
|||
![]() Профи, подскажите, пожалуйста, код:
а) Создание новой записи ТД, масса полей, все ассоциированы с Dataset_ТД - всё прекрасно пашет при редактировании записи ТД и отлично Update. Но использовать Dataset_ТД для создания новой записи ТД с Insert нельзя, тк почему-то не приходит в него RETURNING, который необходим для записи связей ТС. Попробуем использовать FIBQuery, который должен получить RETURNING. Вопрос - как написать код, чтобы в FIBQuery не прописывать все поля новой записи ТД а использовать настройки Dataset? то есть нужен код вроде: FIBQuery.Query(Dataset.Insert) или типа того, то есть использовать в запросе FIBQuery данные и поля из Dataset. (чтобы не нагромождать лишний код и использовать универсальную унаследованную форму с FIBQuery). б) Если а) невозможно, то тогда прошу подсказать код как наиболее правильно и легко взять поля из Dataset и отправить с FIBQuery? в) Пост связей в таблицу ТС - можно как-то запостить их в одну строку скопом? без цикла перебора каждой записи? Нужен код вида: Post All where Checked. |
#6
|
|||
|
|||
![]() а,б-решено.
в - пока не очень - можно как-то в одну строку запостить все строки Dataet2 отмеченные галочкой? При этом нужно им всем ещё назначить новый ТД_ID... |