首页 > 解决方案 > 存储具有可变数量字段的电子邮件列表

问题描述

我希望允许我的用户存储他们的电子邮件列表,并且我正在使用 MySQL。

我想让用户决定他们的电子邮件列表可能包含哪些字段。例如。姓名、电子邮件、位置、生日

每个用户可能需要不同的字段,并且每个列表可能具有彼此不同的字段。

我真的很困惑我应该如何构建我的数据库以实现这一点。任何帮助,将不胜感激。

标签: mysqldatabaselaravel

解决方案


由于字段的数量和字段的类型可能是未知的,并且可能会根据用户而改变,因此将它们硬编码为列可能没有意义。相反,我建议您在此处使用键值对方法。首先定义一个email_fields看起来像这样的表:

user_id | id | field
1       | 1  | Name
1       | 2  | Email
1       | 3  | Location
1       | 4  | Birthday

上面的用户 1 已将他的电子邮件列表配置为具有四个字段,这些字段是您在问题中作为示例提供的。为这个用户添加更多的字段,或者添加更多的用户,只是意味着在这个表中添加更多的记录,而不改变实际的列。

然后,在另一个表中,email_lists您将存储电子邮件地址和用户的实际元数据:

id | user_id | field_id | value
1  | 1       | 1        | Sam Plan
1  | 1       | 2        | sam.plan@somewhere.com
1  | 1       | 3        | Gonesville, AL
1  | 1       | 4        | 1967-03-28

换句话说,基本思想是,对于每个用户,每封电子邮件都将表示一组对应于一组键值对的记录。


推荐阅读