Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Всем добрый день\вечер\ночь\утро
Ситуация следующая: есть небольшое приложение, которое я разрабатываю для своих нужд на Laravel и возник вопрос по проектированию БД.
В чем суть:
Изначально я создал несколько таблиц:
1) Таблица пользователей
2) Таблица со списком папок и внешним ключом на пользователя-владельца этих папок
3) Таблица с категориями внутри этих папок и ссылкой на айдишник папки, которая содержит категорий
4) Таблица с документами внутри категорий и ссылкой на айдишник категории, которая содержит документы
Все шло хорошо: с помощью hasMany связи я вытягивал коллекции папок, а с помощью hasManyThrough связей коллекции категорий внутри папок на основе аутентифицированного модели юзера. Но беда началась, когда я попытался вытащить документ по той же hasManyThrough: вытаскивалка сработала, но только для категории с id = 1 (т.к. и аутентифицированный пользователь имел такой айдишник). Документы, которые относились к другим категориям, но должны были принадлежать этому пользователю, остались не у дел. Можно было бы попробовать продолжить работать с такой БД, но подход был бы неконсистентым, как минимум, для модели документов
Немного попытавшись пораскинуть мозгами, я перекрутил схему на следующий лад: создать таблицы сущностей (папки, категории, документы) без внешних ключей, а вместо этого использовать одну таблицу, которая будет состоять, по-сути, из внешних ключей:
внешний ключ на пользователя - внешний ключ на папку - внешний ключ на категорию - внешний ключ на документ
В таком случае, если я ничего не упускаю, должна быть возможность вытягивать любые записи принадлежащие конкретному пользователю основываясь только на айдшинике этого пользователя и при этом, что не мало важно, не нарушать правила нормализации БД в части дублировании информации, т.к. по-сути, дублирующих записей в основных таблицах у меня нет, но есть этакая "справочная таблица" для каждого конкретно взятого пользователя. И в этой ситуации меня волнует вопрос безопасности данных - насколько этот подход безопасен?