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