Как правильно построить структуру БД (SQL)?

К примеру есть 4 типа файлов (изображение, видео, аудио, документ), у всех из них есть общие поля:

* Размер файла
* SHA512 хеш
* Дата создания
* Пользователь, который залил этот файл

И различные поля, свойственные только для конкретного типа файла (обязательные для заполнения not null):

Изображение:
* Высота и Ширина
* колво цветов
* Место съемки

Видео:
* Кодек
* Высота и Ширина
* Продолжительность

Аудио:
* Продолжительность
* Частота дискретизации

Документ:
* Формат документа
* Может ли быть открыт в браузере (boolean)

Сам вопрос: как правильно организовать структуру такой БД?
Должна ли это быть одна таблица? Если да, то как валидировать верность введенных данных по конкретному формату?
Или это должно быть 1 (родительская) + 4 под каждый тип? Опять же как сделать, что-бы у записи в родительской таболице не было ссылки на сразу две другие записи, или вовсе не одной?
  • Вопрос задан
  • 429 просмотров
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Вариантов реализации много. Например классический способ описания:
Таблица атрибутов (id, название, тип_атрибута, признак_обязательного)
Варианты значений для select и multiselect (id_атрибута, номер_значения, значение)
Таблица принадлежности атрибутов (тип_документа, id_атрибута)
Таблица значений атрибутов (id_документа, id_атрибута, значение)

А валидацией должен заниматься клиент, в самой БД для этого нет средств.
Ответ написан
Комментировать
@art_karetnikov
Лучший мой проект: Мобильный банк Сбербанка РФ.
Это зависит от количества данных и видов запросов к ней. Представьте себе свои самые смелые фантазии (про размер базы данных, конечно), умножьте их на десять. Если больше миллиона строк не вышло - спокойно можно хранить в одной таблице, добавив признак, какого рода эта запись - плюс индекс по нему.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы