我正在使用 mysql,我有一个用户表,其中包含一些基本信息,如姓名、姓氏、年龄、性别等。我想提供一个称为个人资料的功能,用户将在其中放置其他信息,如工作地点、备用联系人详细信息等。这些新栏目不是固定的,将来我可以有更多的栏目。据我所知,可以有两种方法:
1) 每次需要时添加新列,这会将 Null 条目放入新添加列的前几行。
2) 添加一个新表,其中将包含所有列 id 到列名,以及另一个表,其中包含键值之类的结构,用于每个具有该特定新列条目的用户,如下所示:
表 1: 用户名 |名字 |年龄 | ....
表 2: 列号 |列名 |数据类型
表 3: 用户名 |列号 |值
哪种方法适合我的场景?
最佳答案
这似乎是一个非常有效的问题,只是没有正确答案。
至少还有两种方法不在您的列表中:
- 将附加字段存储在每条记录中的 JSON 或 XML 字符串中。
- 使用相同的主键在辅助表中添加列。
为了确定哪种方法最好,您需要更多地了解您的问题。例如:
- 有多少个人资料?
- 添加新列时是否考虑了性能?
- 新列是否需要索引?
- 新列的类型是否始终相同?
- 新列是否需要外键引用?
- 是否需要或需要其他约束条件?
- 是否所有配置文件都包含所有列?
- 配置文件列数是否会超过表格的最大列数?
这个问题没有一个正确答案。 EAV(实体-属性-值数据模型)方法(您的第二种方法)通常会使所有列都是相同类型并排除外键约束(解决这两个问题的方法有些麻烦)。另一方面,如果配置文件列的数量超过了数据库的最大值,那么您可能别无选择,只能使用某种形式的 EAV。
关于mysql - 定期向 sql 表中添加列的好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30843398/