Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как организовать фото-хранение


Автор: Рыжий 17.2.2007, 19:45
Есть сайт, на котором будет храниться довольно большое кол-во фотографий. Подскажите пожалуйста, как правильно организовать структуру БД + хранение фоток в директориях.


Итак, все фотографии можно разделить на такие категории:
1)личные фотки участников
  Тут думаю все понятно – просто свои фото, в кол-ве 5-10 штук

2)фотки, которые они вставляют в свои сообщения.
  Человек может вставить в сообщение как линк на картинку (в таком случае записываем линк), так и загрузить картинку на сервер (закачиваем картинку к себе).

3) Другие фотки

Формат записи:
Item_id  item_foto
15    pic.jpg
20    pic2.jpg

То есть фотки к различным товарам.

Теперь о реализации:
Можно создать одну таблицу в БД, с полем, например, type в котором записывать какого типа картинка (и соответственно как ее применять)
Или лучше все 3 категории разбить по отдельным таблицам?

И самое главное – как их размещать в директориях на сервере?
Раньше думал делать так:

Foto
--thumbs

----17.02.07
------pic.jpg
------mypic.jpg

----18.02.07
------next.jpg
------next2.jpg


--foto
----17.02.07
------pic.jpg
------mypic.jpg

----18.02.07
------next.jpg
------next2.jpg

Но… как то запутано получается Имхо smile

Что вы можете предложить?

Автор: mishaSL 17.2.2007, 20:10
1. Структура БД.
Структура БД будет очень сильно зависеть от функций которые ты хочешь выполнять с этими фотографиями. Скажем скорее всего тебе понадобится возможность просмотреть все фотографии какого-либо пользователя. Тогла необходимо хранить ID пользователя, который добавил фото. Или когда ты удаляешь сообщение в котором есть фото, то фото тебе тоже нужно удалить - соответственно нужна связь.

Примерно это должно выглядеть так (ИМХО конечно):
(типы даных указывать не буду)
Код

Table with users
user_id
user_login
// и другие данные поьзователя

Table with private user's photos
photo_priv_id
user_id
photo_priv_name
// и другие данные которые тебе необходимо

Table with message
mes_id
user_id
// данные сообщения

Table with message's photos
photo_mes_id
mes_id
photo_mes_name
// и другие данные которые тебе необходимо


Т.е. основная идея все данные связаны. Ты без труда можешь посмотреть какие фото у какого пользователя, какие фото в каком сообщении и т.д.


2. Структура файловой системы.
Это уже сугубо личный вопрос. Кому как удобно. Только делай проверку на совпадение имен файлов.



Автор: Рыжий 17.2.2007, 20:35
Цитата(mishaSL @  17.2.2007,  20:10 Найти цитируемый пост)
Только делай проверку на совпадение имен файлов

Я думаю не нужно сохранять имена файлов, я лучше буду изменять имя на time() или подобное.

Автор: mishaSL 17.2.2007, 20:46
Цитата(Рыжий @  17.2.2007,  20:35 Найти цитируемый пост)
Я думаю не нужно сохранять имена файлов, я лучше буду изменять имя на time() или подобное. 


Зависит от того какие функции пользователи могут выполнять со своими фото. Если скажем пользователь может куда-либо вставлять свои личные фото (и ему нужно выбрать из списка) или посмотреть ссылку на фото, ему будет удобнее если имя фото первоначальное (к примеру myBigPhoto.jpg) или изменено на (MyBigPhoto_01.jpg). 

А если эти фото будут только выводиться, то это уже как тебе удобнее... 

Автор: Рыжий 18.2.2007, 02:10
Еще рассматриваю такой вариант БД:

id  user_id          path                type           date
1       10      www.a.ru/pic.jpg      1      18.02.07 18:53
2       23      1225434587.jpg       2      19.02.07 19:57

id - уникальный id, smallint unsigned, auto_increment
user_id - id пользователя smallint unsigned
path - путь к файлу
type - enum("1","2") тип фотки - в сообщение или для себя
date - дата добавления.

А вот фотки к товарам хранить в отдельной бд - там много своих полей, которые при "простом" использовании будут NULL и все.


Автор: mishaSL 18.2.2007, 17:24
Рыжий, возникает несколько проблем при такой структуре БД:

1.  Основная проблема: фото в сообщении не привязано к самому сообщению. При удалении сообщения будут оставаться лишние фото.

2.  В поле `path` лучше не смешивай фото хранящиеся у тебя и ссылки на фото с других сайтов.


Автор: Рыжий 19.2.2007, 17:24
Цитата(mishaSL @  18.2.2007,  17:24 Найти цитируемый пост)

1.  Основная проблема: фото в сообщении не привязано к самому сообщению. При удалении сообщения будут оставаться лишние фото.


Да, это так. В связи с этим решил разбить все это на отдельные БД. Ведь когда выводишь личные фотки юзера - не нужно грузить БД со всеми его фотками за всю историю...


Цитата(mishaSL @  18.2.2007,  17:24 Найти цитируемый пост)
2.  В поле `path` лучше не смешивай фото хранящиеся у тебя и ссылки на фото с других сайтов.


Как ты себе представляешь решение? Сделать еще одно поле?

Автор: mishaSL 19.2.2007, 19:08
Цитата(Рыжий @  19.2.2007,  17:24 Найти цитируемый пост)
Как ты себе представляешь решение? Сделать еще одно поле? 


Если тебе необходимо хранить отдельно этот путь, то лучше сделай связанную с сообщениями таблицу. Так будет проще управлять этими данными.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)