Или, точнее, что-то вроде ключа прадеда.
У меня есть мультитенантный веб-сайт, у каждого арендатора может быть много форумов, у каждого форума может быть много тем, у каждой темы может быть много сообщений. , Существует API, в котором арендатор может запрашивать информацию о чем угодно вплоть до одного поста. Но чтобы убедиться, что им разрешено это делать, я мог бы посмотреть на thread_id
в posts
, затем forum_id
в threads
, затем tenant_id
в forums
, и все, чем я был на самом деле после того, как было tenant_id
, чтобы проверить, соответствует ли клиент, делающий запрос.
Помещение поля tenant_id
по всей цепочке, вероятно, является нарушением некоторой нормальной формы, поскольку это избыточная информация, но удар по производительности для всех этих объединений невозможно игнорировать, и бывают случаи, когда мне не нужна какая-либо из этой объединенной информации, кроме одного столбца. Добавление tenant_id
ко всем столбцам также сделает экспорт данных одного арендатора нелепо простым.
Но я не хочу, чтобы полиция баз данных постучалась в мою дверь и забрала меня. Я изучал реляционные БД в колледже с акцентом на минимализм и нормализацию, поэтому преднамеренная денормализация базы данных кажется кощунством. Но место тупо дешево, и хранение еще одного int не сломает банк. Я что-то упускаю здесь очевидное? Просто следите за ссылочной целостностью, и я чувствую, что со мной все будет в порядке?