什么是用于存储用户设置的有用架构?

问题描述 投票:0回答:3

我想存储一些用户设置,我想到了 3 个选项,因为这是我的第一个项目,我想以正确的方式启动它,我不知道哪个是执行此操作的最佳方法..

  1. 将单个设置直接存储在用户表的列中

  2. 拥有一个 user_settings 表,其中包含设置名称、设置值和用户 ID 列

  3. 将 JSON 字符串存储在用户表中名为“user_settings_json”的列中

在设计分析中,我注意到 WordPress 将其存储在单独的表中,但我不确定这对于每个应用程序都是必要的(因为我的应用程序没有像 wp 那样多的用户设置)

我正在使用 Laravel、PHP、javascript/jquery。

你们认为在设计、可维护性和性能方面哪个最有用、总体更好?

php database-design laravel-5
3个回答
4
投票

存储 JSON 字符串?不!

您希望能够隔离设置,只需查询您需要的内容即可。因此,请将其保存在单独的列中!

至于是否必须单独制作一个表格的问题,不,您不必这样做。当您刚刚获得一些简单的设置时,您只需将列添加到现有的用户表中即可。请注意此处的限制。如果您确实需要高级设置,我建议使用单独的表。最好早点做。并非每个设置都适用于每个用户。例如,当您拥有可以拥有更多设置的高级帐户时。所以,我会做的就是将其分开。

顺便说一句,如果这些列已经位于名称中包含“setting”的单独表中,我不会让这些列以“setting_”开头。

结论:选项2:)


0
投票

最近我为我的项目制作了一个使用 Laravel 9 的包,它允许您向任何 Laravel 模型添加设置。它可以将值转换为 bool、int 等基本类型,也可以转换为自定义类。例如:

$user->settings->get('is_gamer');
$user->settings->set('games_count', 10);

// or global site scoped
Settings::get('display_annoucement');

// more advanced usage with definition of custom class
$address = $user->settings->get('address');
$address->country = 'Poland';
$address->zip = '11-222';
$address->city = 'Warsaw';
$user->settings->put('address', $address);

// any model that implements trait
$article->settings->get('show_breadcrumbs');
$post->settings->get('allow_replies');

您可以在这里找到它:https://github.com/npabisz/laravel-settings


0
投票

如果有人正在寻找完整类型的解决方案, 这是我对这个主题的看法:laravel-preference

您可以将所有设置存储在一个或多个枚举中,并转换值。 此外还有授权、api 路由支持等等

© www.soinside.com 2019 - 2024. All rights reserved.