Страницы

Поиск по вопросам

воскресенье, 1 декабря 2019 г.

База данных соц сети

#база_данных


Хочу написать свое веб-приложение. Раньше никогда не занимался проектированием БД.
Прошу оценить и указать мои ошибки. Идея такая

Пользователи могут создавать альбомы и могут добавлять фотографии. Так же пользователи
могут подружиться и обмениваться сообщениями. Еще у каждой фотографии можно добавлять
хэштеги. Их решил сохранять прям в таблице с фотографиями. Еще возник вопрос. как лучше
хранить сами картинки? Сохранять их на серваке и в БД помещать путь до файла, или лучше
хранить прям изображение в БД?



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. Это, в целом, позволяет по минимуму выделять память в БД для хранения картинок, полное безразличие к пользовательскому имени картинки, информативное и ожидаемое имя картинки.

Комментариев нет:

Отправить комментарий