#база_данных
Хочу написать свое веб-приложение. Раньше никогда не занимался проектированием БД. Прошу оценить и указать мои ошибки. Идея такая Пользователи могут создавать альбомы и могут добавлять фотографии. Так же пользователи могут подружиться и обмениваться сообщениями. Еще у каждой фотографии можно добавлять хэштеги. Их решил сохранять прям в таблице с фотографиями. Еще возник вопрос. как лучше хранить сами картинки? Сохранять их на серваке и в БД помещать путь до файла, или лучше хранить прям изображение в БД? UDP Обновил
Ответы
Ответ 1
Касательно того, где хранить фотографии, то однозначно на сервере! Выкиньте из головы даже теоретическую возможность пихать блобы в БД! Я недавно переделывал класс загрузчика на 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. Это, в целом, позволяет по минимуму выделять память в БД для хранения картинок, полное безразличие к пользовательскому имени картинки, информативное и ожидаемое имя картинки.
Комментариев нет:
Отправить комментарий