Модераторы: LSD
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите с организацией БД и хранением фоток 
:(
    Опции темы
Dmitry_177
Дата 28.11.2007, 00:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Я создаю сайт что-то вроде фотогалереи.. В БД есть таблица зарегистрированных пользователей(имя, логин, пароль и т.д.) Каждая фотка добавляемая пользователем имеет несколько параметров: описание, дата добавления, тематика и т.д.. Как лучше хранить все эти фотки? В БД создать табличку в которой будет храниться кроме описания, даты добавления, тематики и т.д. еще и путь к фото на сервере.. Или Может лучше и само фото в БД хранить? Ведь при закачке фотки на сервер имя и расширение фотки может совпасть с другой фоткой, той которая уже кем-то другим была закачена..
PM MAIL   Вверх
Данкинг
Дата 28.11.2007, 01:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



Я в веб-дизайне ничего не понимаю, но с БД работаю много. Я бы сделал именно ссылку на картинку в базе. А новые файлы с картинками можно, к примеру, переименовывать для хранения на сайте, добавляя дату и время закачки.


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmitry_177
Дата 28.11.2007, 01:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Данкинг, спасибо, я примерно как-то так и хотел сделать.. но у меня еще возник спорный вопрос.. Если я хочу разделить фотки по тематике, например: спорт, отдых, машины и т.д.. А на сайте можно было выводить все фотки какой-нибудь тематики.. Так вот при выводе фоток какой-то тематики, чтобы побыстрее все грузилось, я решил создать по таблице по каждой тематике.. Все бы хорошо, но.. Как можно сделать тогда чтобы выводились все фотки загруженные каким-то пользователем? Ведь придется по всем этим таблицам искать.. И каждому пользователю по таблице с инфой загруженных им фоток тоже не очень хочется создавать..
PM MAIL   Вверх
Данкинг
Дата 28.11.2007, 01:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



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


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
Dmitry_177
Дата 28.11.2007, 01:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Цитата

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


ИМХО если будет ОЧЕНЬ МНОГО фоток - долго грузиться будет.. Запросы то делать можно и работать будет.. Только вот сколько по времени.. Это ведь нужно по всем таблицам пробегать в поиске нужного номера пользователя.. Мой вопрос в этом и заключался, можно ли как-то подругому организовать БД, чтобы побыстрее грузилось.. smile 

Это сообщение отредактировал(а) Dmitry_177 - 28.11.2007, 01:55
PM MAIL   Вверх
Данкинг
Дата 28.11.2007, 02:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Yersinia pestis
****


Профиль
Группа: Завсегдатай
Сообщений: 8302
Регистрация: 7.11.2006
Где: მოსკოვი

Репутация: нет
Всего: 130



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


--------------------
There's nothing left but silent epitaphs.
PM MAIL WWW   Вверх
skyboy
Дата 28.11.2007, 02:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 5
Всего: 260



    конечно - общую для всех тематик таблицу делать. иначем как ты будешь собирать "все фотки пользователя"? динамически формировать sql низзя, количество категорий меняется... Значит, тебе придетсмя постоянно править запросы. Вдохновляет такое? Меня - нет. Кроме того, такие вещи, как "слить несколько категонрий в одну" или "выделить фото с категориями `Человек` и `Животное` в категорию `Алкоголики с домашними питомцами`" или "найти все фоты, у которых не указана категория" и т.п. будет делать одним запросом на базе одной таблицы. разве это не хорошо? а первоначальный вариант с N таблиц если и будет адекватным решением, то не в этой вселенной smile
PM MAIL   Вверх
Akina
Дата 28.11.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Ну стандартная же задача.

Фоты хранятся на диске. В БД хранится путь к фотке, ее нынешнее имя (оно синтезируется при загрузке, например = ID записи о фотке в таблице фоток), ее исходное имя (разумно отдать ее при скачивании именно с тем именем, с которым ее загружали, не так ли?) и прочую инфу.

Категорирование фоток - типичная задача построения связи много-ко-много и решается созданием таблицы соответствий (ID фотки - ID категории).


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
Dmitry_177
Дата 28.11.2007, 21:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 418
Регистрация: 22.9.2006

Репутация: нет
Всего: нет



Цитата

Фоты хранятся на диске. В БД хранится путь к фотке, ее нынешнее имя (оно синтезируется при загрузке, например = ID записи о фотке в таблице фоток), ее исходное имя (разумно отдать ее при скачивании именно с тем именем, с которым ее загружали, не так ли?) и прочую инфу.

Категорирование фоток - типичная задача построения связи много-ко-много и решается созданием таблицы соответствий (ID фотки - ID категории).


В принципе да.. Тогда тут встает немного другой вопрос.. При сохранении фотки на сервере уже нужно знать ID фотки.. Мы же пока не знаем какой будет ID фотки в новой записи в таблице.. Т.е. нужно сначала записать инфу к фотке в таблицу, потом выбрать ID фотки сравнив эту же записанную инфу.. Т.е. примерно так:

Код

INSERT INTO photoinfo (info, date, type) VALUES ('супер фотка', 28.11.2007, 'sport');
SELECT id_photo FROM photoinfo WHERE info='супер фотка' AND date=28.11.2007 AND type='sport';


Потом уже узнав ID фотки можно присваивать его фотке и сохранять ее на сервере..

Я придумал такую штуку.. Но мне не очень нравится этот механизм тем что только что записали инфу, и потом ее же ищем в таблице.. Может можно что-то получше придумать? У меня база MySQL если что.. Может там полезная функция есть какая.. Может кто знает?

Это сообщение отредактировал(а) Dmitry_177 - 28.11.2007, 21:09
PM MAIL   Вверх
Akina
Дата 29.11.2007, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 13
Всего: 454



Цитата(Dmitry_177 @  28.11.2007,  22:06 Найти цитируемый пост)
Т.е. примерно так:

Единственный способ, который ГАРАНТИРУЕТ получение правильного ID. Кстати, я бы хранил в таблице TimeStamp, а не только дату...


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
intDex
Дата 22.12.2007, 05:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 22.12.2007

Репутация: нет
Всего: нет



тип данных BLOB.
PM MAIL   Вверх
Deniz
Дата 22.12.2007, 09:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1251
Регистрация: 16.10.2004
Где: Новый Уренгой

Репутация: 7
Всего: 44



Dmitry_177, а СУБД какая, может и подскажут нормальный вариант возврата ID фотки.
Опять же на чем пишется web-морда? Можно в имя фотки ID сессии добавить или GUID. Вариантов много.

Добавлено @ 09:35
Кстати в 
Код
SELECT id_photo FROM photoinfo WHERE info='супер фотка' AND date=28.11.2007 AND type='sport';
можно ограничиться IDUser + DateTime(если конечно фотки по одной добавляются, а не пакетом). В любом случае по этим полям будет индекс, возможно даже один составной типа (IDUser asc, FotoDateTime desc). В этом случае запрос отработает быстрее.

Это сообщение отредактировал(а) Deniz - 22.12.2007, 09:37


--------------------
"Для того чтобы сделать шаг вперед, достаточно пинка сзади" (с)
PM ICQ   Вверх
Anark1
Дата 22.12.2007, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 622
Регистрация: 15.12.2006
Где: RF -> Moscow

Репутация: 2
Всего: 11



Цитата(Akina @ 28.11.2007,  08:58)
Категорирование фоток - типичная задача построения связи много-ко-много и решается созданием таблицы соответствий (ID фотки - ID категории).

Выходит, что у одной картинки может быть несколько категорий ? Значит запрос
Код

INSERT INTO photoinfo (info, date, type) VALUES ('супер фотка', 28.11.2007, 'sport');

работать не будет. Хотя, по моему, автору темы достаточно связи один ко многим.
И запрос для связанных таблиц будет вроде
Код

SELECT p.id_photo id FROM p photoinfo, t type WHERE p.info='супер фотка' AND p.date=28.11.2007 AND tid=t.id AND t.type = 'sport';


А по поводу хранения по ссылке или в BLOB, так это заезженная тема. Если необходимо обеспечить независимость от системы папок и файлов на машине-сервере, то лучше использовать BLOB, в остальных случаях - по ссылке.


--------------------
Enjoy yourself, still you can...;)

user posted image

user posted image
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Общие вопросы по базам данных"
LSD
Zloxa

Данный форум предназначен для обсуждения вопросов о базах данных не попадающих под тематику других форумов:

  • вопросам по СУБД для которых нет отдельных подфорумов
  • вопросам которые затрагивают несколько разных СУБД (например проблема выбора)
  • инструменты для работы с СУБД
  • вопросы проектирования БД
  • теоретически вопросы о СУБД

Данный форум не предназначен для:

  • вопросов о поиске разлиных БД (если не понимаете чем БД отличается от СУБД то: а) вам не сюда; б) Google в помощь)
  • обсуждения проблем с доступом к СУБД из различных ЯП (для этого есть соответсвующие форумы по каждому ЯП)
  • обсуждения проблем с написание SQL запросов, для этого есть форум Составление SQL-запросов
  • просьб о написании курсовой, реферата и т.п., для этого есть Центр помощи или фриланс биржа
  • объявлений о найме специалистов, для этого есть раздел Объявления о найме специалистов

Если вы не соблюдаете эти правила, не удивляйтесь потом не найдя свою тему/сообщение. ;)


Полезные советы:

При написании сообщения постарайтесь дать теме максимально понятное название. В теме максимально подробно опишите проблему. Если применимо укажите: название базы данных и версии (MySQL 4.1, MS SQL Server 2000 и т.п.); используемых язык программирования; способа доступа (ADO, BDE и т.д.); сообщения об ошибках.

Для вставки кода используйте теги [code=sql] [/code].

Литературу по базам данных можно поискать здесь.

Действия модераторов можно обсудить здесь.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, LSD, Zloxa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | СУБД, общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.