Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 用户配置文件架构-如何处理包含多条信息的列?_Database_Database Schema - Fatal编程技术网

Database 用户配置文件架构-如何处理包含多条信息的列?

Database 用户配置文件架构-如何处理包含多条信息的列?,database,database-schema,Database,Database Schema,我正在构建一个数据库,其中有以下两个表: 1) [用户]包含以下列:id、用户名、密码、电子邮件(以及其他一些) 2) [user_profile]其中包含有关用户的更多信息,如:性别、身高、县、语言等 我的问题是关于第二张桌子的。在可能有多个答案的列(如语言或宠物)中存储信息的好方法是什么? 如果我存储了这样的信息,我的模式仍然是一个好主意吗?到目前为止,我唯一的想法是将几个选项存储在一列中,并用类似于“-”的字符将它们分开。稍后,当我从数据库中提取信息时,我将从这些列中分割信息,这些列可以包

我正在构建一个数据库,其中有以下两个表:

1) [用户]包含以下列:id、用户名、密码、电子邮件(以及其他一些)

2) [user_profile]其中包含有关用户的更多信息,如:性别、身高、县、语言等

我的问题是关于第二张桌子的。在可能有多个答案的列(如语言或宠物)中存储信息的好方法是什么? 如果我存储了这样的信息,我的模式仍然是一个好主意吗?到目前为止,我唯一的想法是将几个选项存储在一列中,并用类似于“-”的字符将它们分开。稍后,当我从数据库中提取信息时,我将从这些列中分割信息,这些列可以包含多个选项,并用“-”分隔


这是个好主意吗?有更好的解决方案吗?

只要您想在从表中提取一行后进行额外的解析,您建议的解决方案就可以了。尽管我想到了几个其他的选择。两者都需要创建新表。我不是专业的模式设计师,所以请随意评论我的选择

1) 这里以语言为例,创建一个语言表,该表将枚举所有语言选项。然后再创建一个表来指定从概要文件到语言的映射。所以你的两张新桌子是

Language: Language_Id, Language

User_Profile_Language_Mapping: Profile_Id, Language_Id
通过这种方式,只需在User_profile_language_映射表中添加一个条目,就可以将配置文件与任意多个语言关联起来

2) 这次以Pets为例,创建另一个表,将用户配置文件映射到Pets

User_Profile_Pets: Profile_Id, Pet
我不知道你想存储关于宠物的什么信息,但它可能只是宠物名称、宠物类型,也可能是宠物表的外键,你可以在其中指定关于宠物的大量信息


对于可以列举所有可能性(如语言)的数据,我喜欢选项1;对于可能有无限多可能性(如宠物名)的数据,我喜欢选项2。

我可能应该在我的问题中提到它,但我基本上是在寻找最有效的操作方法。我的建议需要在从DB获取结果后进行一点解析,而您的建议不需要解析,但需要两个连接(用户配置文件、用户配置文件、语言映射和语言)。虽然我喜欢你的想法,但我不确定哪一个更有效。或者可能还有另一个更有效的选择,两者都有……我不能说这三个选择中哪一个是最有效的。我知道,无论您使用什么数据库,都应该提供一些工具,使查询通过缓存或存储过程运行得更快。查询优化不是我的强项。不过,我能说的最好的事情是尝试几种方法,并运行一些测试,以查看该实现的效率,并在此基础上以最快的速度进行。感谢您的输入。我要试试你的建议,看看效果如何。酷。如果您不介意在某个时候发布结果,我很想知道性能测试是如何进行的。