Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 11.08.2015, 01:50   #1
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию Посоветуйте привязку картинки к записи

Доброе время суток, форумчане.
У меня есть таблица птиц (bird), с их голосами (в таблице service), с полями:
Код:
id, field1 (integer), description (string), field2 (blob).
 1 _____ 234 ___________ voice _______ mp3
 2 _____ 234 ___________image_______ jpg <- например
(честно говоря, названия полей не очень, т.к. в эту таблицу я скидывал все одиночные параметры, которые хранить не где)
До этого момента было все замечательно: пользователь становился на запись с птицей, просматривал ее характеристики, и если хотел нажимал кнопку (с динамиком), и отдельным запросом подкачивался голос.

Теперь к каждой птице, добавится ее одна или несколько картинок (или фото), скорее всего одна. Картинка должна будет отображаться всегда (при перемещении по списку птиц), если она есть в БД.

Теперь наверно придется делать все таки отдельную таблицу (н-р «features») с полями:

id, voice, image

т.е. таблицу с id, и двумя полями типа blob (voice и image), т.е. не т.к. в таблице service. А в табл. bird, поле с ссылкой на id в табл. features.
Связку Master-detail – делать не хотелось бы (вытягивать все blob`ы в dataset), как-то не очень…

Есть еще вариант:
«в событии OnDataChange (TDataSource) написать запуск таймера с некоторой задержкой, много большей чем автоповтор клавиатуры. А уже по срабатыванию этого таймера - загружать картинки, с помощью отдельного запроса, через какой-нибудь TIDQuery». Вопрос:

-- Как будет правильнее поступить в этой ситуации?

Заранее спасибо.

P.S.
В табл. "bird", записей с одно й той же птицей может быть несколько (не спрашивайте почему)

Последний раз редактировалось KBO; 11.08.2015 в 01:55.
KBO вне форума Ответить с цитированием
Старый 11.08.2015, 07:37   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Делать так:
Таблица Birds
id - собственное
name - имя, название птицы
description - описание птицы
здесь же можно надобавлять Ваши параметры

Таблица Images
Id - собственное
birds - ссылка на птицу
img - сам рисунок

Таблица Voices
Id - собственное
birds - ссылка на птицу
voice - сам голос

Это кошерно. Это принципы реляционных БД. Это много картинок и голосов к птице, то есть это масштабируемость. Делать так надо сразу и не изобретать велосипед. Далее сначала строится БД, потом под нее делается программа оболочка. Именно не соблюдение элементарных принципов проектирования приводит к таким проблемам.
Цитата:
В табл. "bird", записей с одно й той же птицей может быть несколько (не спрашивайте почему)
Не будем спрашивать. Мы и так знаем - от рас3,141592здяйства. В одной таблице ничего дублироваться не должно - дубликаты от того, что либо неверная структура таблицы, либо Вы пожадничали и вместо 2-3-х таблиц зафигарили все в одну кучу. Следуя Вашей логике на огороде надо выкопать одну яму, закинуть все туда и поливать почаще.
Цитата:
Связку Master-detail – делать не хотелось бы (вытягивать все blob`ы в dataset), как-то не очень…
Чего там не очень? Делается просто, когда в birds выбрана птица, Вы делаете select например по voices с параметром where birds=id птицы. Получаете список голосов и даете пользователю выбрать нужный. Ну а там уже по id голоса получаете сам голос. Немного занудно, зато вполне понятно и легко разбить на отдельные этапы и задачи. А значит легко автоматизировать процесс. Рисунки полностью аналогично.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.08.2015 в 08:08.
Utkin вне форума Ответить с цитированием
Старый 11.08.2015, 10:57   #3
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

О "Master-detail"-

Это например, если выборка например 500 записей птиц (в dataset), тогда, какие же объемы будут у dataset`ов "Images" и "Voices"? А если это еще и по сети будет грузиться, то вообще...

Последний раз редактировалось KBO; 11.08.2015 в 11:00.
KBO вне форума Ответить с цитированием
Старый 11.08.2015, 11:11   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Картинки и звуки не надо сразу все грузить, а подгружать по мере необходимости. В OnAfterScroll например
Цитата:
Не будем спрашивать. Мы и так знаем ...
Угу, знаем
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 11.08.2015, 11:20   #5
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Картинки и звуки не надо сразу все грузить, а подгружать по мере необходимости. В OnAfterScroll например
Ну да, только через некоторый промежуток времени должен срабатывать запрос на картинки. А то если пользователь например, станет мышкой на grid с птицами, и нажмет кнопку "вверх" или "вниз", и пройдется (не отжимая ее сверхк вниз или наоборот), то наверно сервер упадет.

Звуки и так грузятся, только по нажатию определенной кнопки, т.е. не всегда.

А насчет дублей я и сам знаю, что нарушил несколько правил РБД, только не знаю пока как от них избавиться

А вот то, что "Image" и "Voice" разносить по разным таблицам - может можно в одну? и добавить в нее поле "Description" и записывать в него "Image" и "Voice" соответственно.
Конечно я не против нескольких таблиц. но их в БД и так 207, и запросы писать в одну таблицу как-то проще по-моему.
Но конечно, если в разные, то в разные...

Последний раз редактировалось KBO; 11.08.2015 в 11:32.
KBO вне форума Ответить с цитированием
Старый 11.08.2015, 12:32   #6
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
Это например, если выборка например 500 записей птиц (в dataset), тогда, какие же объемы будут у dataset`ов "Images" и "Voices"? А если это еще и по сети будет грузиться, то вообще...
Я уже написал как надо сделать.
Цитата:
А насчет дублей я и сам знаю, что нарушил несколько правил РБД, только не знаю пока как от них избавиться
Я Вам навскидку написал как просто сделать - птицы основная таблица, голоса и рисунки подчиненные.
Цитата:
А вот то, что "Image" и "Voice" разносить по разным таблицам - может можно в одну? и добавить в нее поле "Description" и записывать в него "Image" и "Voice" соответственно.
Зачем? К чему эти маниакальные идеи? Складывать мух и котлет в одну кучу?
Цитата:
Конечно я не против нескольких таблиц. но их в БД и так 207, и запросы писать в одну таблицу как-то проще по-моему.
Какая Вам разница? вы их там вручную что ли складываете стопочкой? Запустили цикл и класть сколько там записей и таблиц.
Цитата:
Но конечно, если в разные, то в разные...
Это проще обрабатывать и наведет порядок в голове.
Цитата:
Это например, если выборка например 500 записей птиц (в dataset), тогда, какие же объемы будут у dataset`ов "Images" и "Voices"? А если это еще и по сети будет грузиться, то вообще...
Поэтому и нужные разные таблицы, чтобы грузить только то, что требуется и только тогда когда требуется. А не брать разом весь винегрет.
Цитата:
но их в БД и так 207, и запросы писать в одну таблицу как-то проще по-моему.
Что за мегапроект в 207 таблиц? Вы каждую птицу в отдельную таблицу пихаете что ли? Или это только скромный фронт работ.
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика

Последний раз редактировалось Utkin; 11.08.2015 в 12:35.
Utkin вне форума Ответить с цитированием
Старый 11.08.2015, 12:58   #7
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

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

А вот картинки, в Master-detail, как я выше писал, что будет, если пользователь просто будет жать кнопку "вверх", "вниз" (УДЕРЖИВАЯ их), находясь на списке птиц. Этож запросы (where birds=id птицы) с картинками, будут "летать" туда-суда? точнее только на клиент

Последний раз редактировалось KBO; 11.08.2015 в 13:07.
KBO вне форума Ответить с цитированием
Старый 11.08.2015, 13:18   #8
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
А вот картинки, в Master-detail, как я выше писал, что будет, если пользователь просто будет жать кнопку "вверх", "вниз" (УДЕРЖИВАЯ их), находясь на списке птиц. Этож запросы (where birds=id птицы) с картинками, будут "летать" туда-суда? точнее только на клиент
Поиграйте со свойствами. Аватар, уже предалагал Вам:
Цитата:
В OnAfterScroll например
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 11.08.2015, 13:27   #9
KBO
Форумчанин
 
Регистрация: 11.06.2010
Сообщений: 525
По умолчанию

да, я знаю, с задержкой...
KBO вне форума Ответить с цитированием
Старый 11.08.2015, 14:13   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Далась эта задержка. А попробовать без неё и посмотреть на поведение программы. И как эта задержка будет нервировать пользователя в голову не приходило?
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать привязку программы? SawaMEN Windows 1 27.11.2013 13:05
post (чекер на привязку) AmbaQ Работа с сетью в Delphi 10 27.01.2013 15:08
Динамически изменить привязку контролов Тоба Win Api 5 02.11.2012 21:35
как сделать привязку image1 к image2 win_api Общие вопросы Delphi 7 13.03.2012 20:26
получение картинки по на жатию на записи в дб грид Lokos БД в Delphi 2 03.03.2010 07:38