Касательно того, где хранить фотографии, то однозначно на сервере!
Выкиньте из головы даже теоретическую возможность пихать блобы в БД!
Я недавно переделывал класс загрузчика на gd и систему хранения файлов (картинок), и остановился на таком варианте.
В СУБД (MariaDB) я храню тип файла (раширение) в поле ENUM.
Если связь один 1 к 1, то это просто поле img ENUM('jpg','png','gif'),.
Если связь 1 ко многим, то таблица.
CREATE TABLE `tbl_goods_img`
(
`gid` BIGINT UNSIGNED NOT NULL,
`order` TINYINT UNSIGNED NOT NULL,
`img` ENUM('jpg','png','gif') NOT NULL,
PRIMARY KEY(`gid`,`order`)
)
ENGINE=InnoDB CHARACTER SET utf8 COLLATE utf8_general_ci;
Основная моя идея в том, что название файла у меня состоит из id-шников, разделителя и точкой с расширением. Например 13.jpg или 6-2.png, где 13 - это, id соответствующего поля поля в этой таблице, или 6 - это gid, а 2 - это order соответствующего поля ранее приведенной таблицы.
В таком случае наличие img отличного от NULL нам указывает на существование файла и его тип, а имя файла вычисляется динамически и оно предсказуемо.
SELECT *,CONCAT(`id`,'.',`img`)`img` FROM `tbl_user`;
SELECT `gid`,`order`,CONCAT(`gid`,'-',`order`,'.',`img`)`img` FROM `tbl_goods_img`;
И подобные запросы сразу нам выдают полное имя картинки в поле img, причём если оно отсутствует, (img IS NULL) то CONCAT, и соответственно, img вернёт тоже NULL.
Это, в целом, позволяет по минимуму выделять память в БД для хранения картинок, полное безразличие к пользовательскому имени картинки, информативное и ожидаемое имя картинки.
messages_to_photos- как фотография может прочитать ваше сообщение? Может все-таки комментарии? И не совсем ясно с вашими диалогами и сообщениями - как это работать должно? И зачемmessages_to_photos, если можно сразу внестиphoto_idвmessagesНе совсем понятно зачем все эти таблицы нужны (возможно, из-за неудачных названий). Если dialog - это общение нескольких людей, то как определить кому принадлежит сообщение? Если это только один человек - то почему диалог? И почему бы тогда не внестиuser_idвdialogs? – BOPOH Jan 22 '16 at 15:46user1, user2иuser2, user1– Jan 22 '16 at 15:46user1, user2иuser2, user1- это нормальная ситуация. Одной из записей может не быть, если только user1 добавил user2, но не на оборот. А вот допускать две записиuser1, user2иuser1, user2точно нельзя – Mike Jan 22 '16 at 15:49photo_idвmessageто как быть если фото не будет в сообщении? или если будет много фотографий в одном сообщении? тож самое и в таблицеdialogs.user_to_dialogsиmessages_to_photosэто связующие таблицы – MrGarison Jan 22 '16 at 15:56