gpt4 book ai didi

database - 选择一种方法来存储用户配置文件?

转载 作者:太空狗 更新时间:2023-10-30 01:47:21 26 4
gpt4 key购买 nike

我正在为一个网站开发用户配置文件系统,并且正在考虑采用什么方法更好(可扩展)。我想出了两个解决方案,正在寻找输入或可能指向我可能错过的东西的指针。

以下创建表语句并不意味着可执行,而只是为了让您了解所涉及的表的布局。

我最初的想法是这样的:

CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,

user_email VARCHAR(320),

user_joined DATATIME,
user_last_seen DATATIME,

user_name_first VARCHAR,
user_name_last VARCHAR,

user_name_alias VARCHAR,

user_location_country VARCHAR,
user_location_region VARCHAR,
user_location_city VARCHAR

# ...
);

显然,这根本不是可扩展的,添加额外的属性我很烦。一个优点是我可以快速搜索匹配一组特定属性的用户。我环顾四周,这是一种非常常见的方法(例如 Wordpress)。

我的第二种方法(我目前正在尝试的方法)更具可扩展性,但我有点担心性能:

CREATE TABLE user(
id INT UNSIGNED NOT NULL AUTO_INCREMENT,

user_email VARCHAR(320)
);

CREATE TABLE user_profile(
user_id INT UNSIGNED NOT NULL,

visibility ENUM('PRIVATE', 'PUBLIC'),

name VARCHAR,
value VARCHAR
);

使用这种方法,每次使用都有一组与之关联的键值对,这使得添加其他属性以及在用户登录时加载用户配置文件变得微不足道。但是,我丢失了第一种方法中的所有类型信息(例如,DATETIME 现在存储为格式化字符串),因此某些搜索变得很烦人。这确实让我可以更好地控制选择用户希望公开显示的属性。

混合方法是否会更好,让我能够平衡两种方法的优缺点? SO使用什么方法?有没有我没有想到或错过的另一种方法?

扩展:如果采用混合方法,将用户表中的属性也插入到 user_profile 表中以控制它们对其他用户的可见性是否有利,或者这是否可能被视为额外的开销?

最佳答案

我会使用混合方法。应该将一些基本属性(例如用户名、电子邮件、上次登录日期等)添加到您的用户表中。次要的项目可以作为键/值对添加。

通过这种方式,您仍然可以轻松地搜索最重要的信息,并在不更改架构的情况下继续添加配置文件项。

关于database - 选择一种方法来存储用户配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/429878/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com