Привет! Есть несколько типов материала. К каждому из них будет прекреплчться изображения, в некоторых mp3. Как лучше хранить эти файл? Одна таблица для mp3 вторая для фотографий, а потом по йдишникам материала делать выборку, или запихивать в поле таблицы материала?
Зависит от БД, если в БД есть специальноые средства хранения файлов, как в PostgreSQL, тогда вполне приемлемо хранить сами файлы в бд, если речь о MySQL, тогда я бы лучше хранил в файловой системе. Ну и в целом я бы не рекомендовал 2 таблицы для файлов, 1-ой вполне достаточно.
Я имел в виду не файлы А данные о них, адреса, айдишник, и т.д. Если в одной, не будет ли потом много времени тратиться на запрос, если колличество записей будем большим?
если хранить не сами файлы а именно инфу о них то делай так как удобнее ее потом отображать - например в таблице будет имя файла, описание, какието теги - то лучше хранить отдельно фотки отдельно мп3. а если только имя будет храниться то проще делать в одну таблицу на скорость это никак не повлияет даже если там будет миллиард записей
Можно разработать структуру чтоб хранить всю информацию о файлах, в одной таблице и будет все удобно) на скорость это конечно повлияет, но я думаю у автора не будет таких объемов данных, чтоб падение скорости было заметно.
Это ведь всё файлы. Почему бы не сделать таблицу files и держать там все общие для любый файлов атрибуты: имя под которым сохранено, оригинальное имя, размер, id пользователя-хозяина и т.д. Так ты избежишь дублирования однотипных операций. Возможно тебе понадобится дополнительно иметь таблицы для специфических свойств фото, другую для музыки... Когда понадобится, будешь делать JOIN этих таблиц с таблицей files. Все просто! Я непонял фразу про "запихивать в поле таблицы материала" -- это чего куда?
Ну это когда есть таблица например "Обьявления" В ней id, title, description, created и т.д. И сделать еще поле для фотографий.
хрень какая-то ты вместо "поле для фотографии" используй "id вложенного файла. он будет хоть фотографией, хоть порнографией, что угодно. Добавлено спустя 2 минуты 28 секунд: а лучше наоборот в file вставить поле id_announce, тогда можно будет в одной объяве делать несколько файлов-вложений.
на всякий случай поясняю: здесь никто не хранит файлы в базе. таблица files хранит описания файлов: имя, размер и проч. )))
потому что в PostgreSQL есть специальные функции для работы с файлами, там не блоб поля, а специальное хранилище, а в бд хранится просто ID файла, для доступа к нему, преимущество в целостности данных, при удалении строки с информацией о файле автоматически удаляется файл из бд, ну и наоборот, файл сам по себе никуда не денется. Целостность данных основная проблема, когда файлы лежат в ФС.
да, файлы могут осиротеть, т.к. файловая система в транзакцию не попадает. на самом деле BLOB и FILE объекты в некоторых СУБД тоже лежат вне транзакций и не факт что проблема не сохраняется. про PostgreSQL не знаю - не скажу. но если подумать хорошенько, то осиротевший файл это 1) редкость, 2) жрать не просит и 3) вычислить его не составляет труда. можно в кроне раз в месяц прогонять профилактику. зато в остальном файлы выгоднее, если не прокачивать их через скрипт, а отдавать как статику. скорость отдачи это критически важный показатель.