MySQL хранит детали файла в одной или нескольких таблицах базы данных и лучший способ создания родительских и дочерних категорий - PullRequest
1 голос
/ 27 декабря 2011

----- PHP и mySQL -----

У меня два быстрых вопроса, мне нужен совет.

На моем сайте я разрешаю пользователям загружать следующие файлы - PDF / Видео / Фото. Все файлы, загруженные пользователем, отображаются на странице профиля. Все загруженные файлы можно искать по имени или тегам и типу файла.

Каким будет лучший дизайн базы данных mysql?

  1. Хранить все файлы в одной таблице, их проще отображать на странице профиля пользователя, выполнять поиск по типу и т. Д.

  2. Одна таблица для каждого типа, например pdf, видео и фото <- это может быть лучше для производительности, но для поиска я не знаю? </p>

Второй вопрос: я разрешаю пользователям создавать свои собственные меню / категории с родительскими и дочерними категориями, например:

  • -> родительская категория
        • > детская категория
        • > детская категория
  • -> родительская категория

        • > детская категория
        • > детская категория

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

Чтобы получить все категории, я сначала получаю все родительские категории и использую цикл foreach. Я вызываю функцию внутри цикла, чтобы получить дочерние категории по родительскому идентификатору.

Я хочу знать, является ли это лучшим подходом для этого или это можно сделать в запросе mySQL без циклов?

спасибо, ребята !!!

1 Ответ

0 голосов
/ 27 декабря 2011

Ваш первый вопрос зависит от того, какую информацию вы хотите сохранить о файлах.

Если он универсален для всех типов (имя, дата, тип файла, размер и т. Д.), То имеет смысл использовать отдельную таблицу Files со столбцом типа.

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

Что касается вашего второго вопроса, грубый SQL основан на соединении между вашей таблицей родительских категорий и таблицами дочерних категорий.

Пример кода псевдо:

select p.userid, p.parentcategoryid,c.childcategoryid 
from ParentCategory p INNER JOIN   
     ChildCategory c  
        on p.parentcategoryid=c.parentcategoryid
WHERE 
      p.userid = @UserID
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...