Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Laravel 5.x » Какой подход более правильный при проектировании БД » 22.12.2018 23:22:40

Drezor
Ответов: 2

Всем добрый день\вечер\ночь\утро

Ситуация следующая: есть небольшое приложение, которое я разрабатываю для своих нужд на Laravel и возник вопрос по проектированию БД.

В чем суть:

Изначально я создал несколько таблиц:

1) Таблица пользователей
2) Таблица со списком папок и внешним ключом на пользователя-владельца этих папок
3) Таблица с категориями внутри этих папок и ссылкой на айдишник папки, которая содержит категорий
4) Таблица с документами внутри категорий  и ссылкой на айдишник категории, которая содержит документы

Все шло хорошо: с помощью hasMany связи я вытягивал коллекции папок, а с помощью hasManyThrough связей коллекции категорий внутри папок на основе аутентифицированного модели юзера. Но беда началась, когда я попытался вытащить документ по той же hasManyThrough: вытаскивалка сработала, но только для категории с id = 1 (т.к. и аутентифицированный пользователь имел такой айдишник). Документы, которые относились к другим категориям, но должны были принадлежать этому пользователю, остались не у дел. Можно было бы попробовать продолжить работать с такой БД, но подход был бы неконсистентым, как минимум, для модели документов

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

внешний ключ на пользователя - внешний ключ на папку - внешний ключ на категорию - внешний ключ на документ

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

Подвал раздела