Как оптимизировать эксклюзивные ролевые таблицы? Должен ли я помещать данные о ролях пользователя в отдельные таблицы или следует преобразовать их как массив в одну таблицу? - PullRequest
0 голосов
/ 14 июля 2020

Прямо сейчас у меня есть одна таблица пользователей и дополнительные таблицы user_ [role], такие как user_admins, user_founders, user_vendors и так далее. Как вы понимаете, каждая таблица user_ имеет свои собственные c поля. И все таблицы c для профессий (user_ [role]) связаны с таблицей 'users' и имеют свои собственные модели, такие как UserAdmin, UserVendor.

У них есть отношения, такие как:

Model User . php

public function admin()
{
    return $this->hasOne(UserAdmin::class);
}
public function vendor()
{
    return $this->hasOne(UserVendor::class);
}
...   

Модель UserAdmin. php

public function user()
{
    return $this->belongsTo(User::class);
}

Модель UserVendor. php

public function user()
{
    return $this->belongsTo(User::class);
}

Это нормально работает. Но это стоит

0.59
"select * from `user_admins` where `user_admins`.`user_id` in (1)"
[]
0.55
"select * from `user_vendors` where `user_vendors`.`user_id` in (1)"
[]
0.36
"select * from `user_customers` where `user_customers`.`user_id` in (1)"
[]
0.31
...

Поскольку мне нужно загружать все эксклюзивные таблицы вместе с пользователем, у меня есть дополнительные sql запросов для каждой роли. Поэтому я пытаюсь оптимизировать это каким-либо образом.

(Это пришло мне в голову прямо сейчас. Чтобы немного снизить нагрузку, я мог бы загружать только роли, которые есть у отдельного пользователя. Как уже было сказано, немного)

Думаю, я мог бы создать таблицу типа «extra_data» с полем для каждой роли и сериализовать (преобразовать) в нее все данные. И, возможно, я мог бы присоединиться к ним.

user_id   admin   vendor   customer ...
1.        {"":""} {"":""}  null     ...

Я мог бы продолжить как есть или изменить его другим подходом. Я уверен, что есть и другие подходы. Если вы столкнулись с такой ситуацией или у вас есть какие-либо проблемы, пожалуйста, дайте мне знать. Мы будем благодарны за любые идеи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...