| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > 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 Но… как то запутано получается Имхо Что вы можете предложить? |
| Автор: mishaSL 17.2.2007, 20:10 | ||
| 1. Структура БД. Структура БД будет очень сильно зависеть от функций которые ты хочешь выполнять с этими фотографиями. Скажем скорее всего тебе понадобится возможность просмотреть все фотографии какого-либо пользователя. Тогла необходимо хранить ID пользователя, который добавил фото. Или когда ты удаляешь сообщение в котором есть фото, то фото тебе тоже нужно удалить - соответственно нужна связь. Примерно это должно выглядеть так (ИМХО конечно): (типы даных указывать не буду)
Т.е. основная идея все данные связаны. Ты без труда можешь посмотреть какие фото у какого пользователя, какие фото в каком сообщении и т.д. 2. Структура файловой системы. Это уже сугубо личный вопрос. Кому как удобно. Только делай проверку на совпадение имен файлов. |
| Автор: Рыжий 17.2.2007, 20:35 |
Я думаю не нужно сохранять имена файлов, я лучше буду изменять имя на time() или подобное. |
| Автор: Рыжий 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 19.2.2007, 19:08 |
Если тебе необходимо хранить отдельно этот путь, то лучше сделай связанную с сообщениями таблицу. Так будет проще управлять этими данными. |