В базе данных что правильнее хранить путь файла с названием, или только название?

201
27 февраля 2019, 15:30

В частности в документации Laravel

приводится пример $path = $request->file('avatar')->store('avatars');

где говорится что потом можно сохранить путь файла в базе данных,

Но как правильнее будет , хранить путь к файлу или только название файла, и как понять в каком случае что использовать ?

Answer 1

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

Путь к картинке делится на 3 части, условно можно обозначить так:

директория/каталоги/имя файла

Пример:

/uploads/avatars/2018/10/20/a_mine.jpg, где:

директория - /uploads/avatars/

каталоги - 2018/10/20/

имя файла - a_mine.jpg

Смысл директории - это разделить вложения по смыслу, например: аватарки, для новостей, для блога, для рекламы, какие-то системные файлы и т.д.

Смысл каталогов - как-то рассортировать файлы, чтобы в одной папке не было много файлов, ибо если у нас в папке будет 10к картинок, то запрос на получение - будет долгим. (P.S. Есть какие-то лимиты, сколько рекомендуется хранить файлов, я не вспомню точно, если будет интересно - загуглите, но там не так уж и много).

Смысл имени файла - последний этап при идентификации файла. Думаю тут все понятно :)

Что и как хранить:

Директорию в базе хранить не стоит, это константа она у вас в проекте где-то должна быть задана, условно, эта константа представляет собой массив, где ключ - алиас директории, а значение - путь. Ну наглядно:

[
    'avatars'    => '/uploads/avatars/',
    'blog'       => '/uploads/blog/',
    'news'       => '/uploads/news/',
    'attach'     => '/uploads/attach/'
]

Максимум что вы можете хранить в таблице, это название алиаса, чтобы понимать к чему принадлежит файл и только в том случае, если у вас в таблице файлы из нескольких директорий (что логично). Например: общая таблица где все файлы из всех директорий.

Вот с каталогами и именем другая басня. Их конечно стоит хранить в таблице, но хранить стоит отдельно друг от друга. Может в БД и больше места занимать будет (но на дворе 2к18, с памятью на винте проблем нет), а в замен вы получите более гибкий инструмент для работы с этими файлами.

P.S. Стоит ли хранить расширения файлов? А вот тут уже спорный вопрос. Зависит от целей, если будет какой-то фильтр для фильтрации по типу - возможно и стоит добавить если у вас очень очень много файлов. Если нет, то на php есть функция для получения расширения файла, а со стороны бд, поиск можно осуществлять и штатными средствами. В любом случае если вы не храните расширение, в любой момент добавить эту возможность - не проблема.

READ ALSO
Настройка php-fpm в Cpanel. Как добавить в него mysqli

Настройка php-fpm в Cpanel. Как добавить в него mysqli

Моя проблема заключается в том что основная версия php 52 и изменена быть не может в панели Cpanel

181
Получить запись с вк

Получить запись с вк

Как получить 5 записей (текст, URL картинки) с сообщества ВКонтакте на JS или PHP

182
502 bad gateway nginx

502 bad gateway nginx

При импорте xml получаю данную ошибку, когда в xml более 100 к записейПодскажите , какие конфиги надо подкрутить на сервере, чтобы увеличить параметры...

160
Как сделать такую выборку sql по датам?

Как сделать такую выборку sql по датам?

Делаю афишу(модуль dle 13) для сайта надо сделать выборку Есть таблица с полем(дат формата Y-m-d) xfields по которому надо сделать выборку, надо выбрать...

154