MySQL 数据库设计 - 将这些字段放入用户表中还是创建新表?

标签 mysql database database-design relational-database normalization

我需要能够存储有关用户的一些信息,我想知道实现此目的的最佳方法。

社交媒体

id - user_id - facebook - twitter_username - display_tweets

一些简单的问题:

  • Facebook 字段只是"is"或“否”,看看他们是否有,所以我知道是否显示该图标。那应该只是枚举 0 或 1 吗? 1 表示他们有一个。
  • 与 display_tweets 相同,应该是枚举 0 还是 1?

然后主要问题是,我应该将这些存储在用户表中吗?所以我只需添加 3 个字段:facebook、twitter_username 和 display_tweets。此外,有些人可能没有 Facebook 或 Twitter。 users 表已经有 20 字段,所以我不想让它太大。

谢谢!

最佳答案

是的,将它们放入您的用户表中。列的成本很低(如果它们通常为空或很小),特别是当您的用户表保证非常小(您不可能有大量用户)时。

将东西放入更多表中只会增加更多工作量。我之前创建过包含超过 50 列的表(已正确标准化 - 所有 50 列都存储不同的数据项)。

如果列不一定与每个用户相关,那么允许 NULL 可能是个好主意。 “魔法值”不是一个好主意(我经常看到“”或-1用作“魔法值”)。

关于MySQL 数据库设计 - 将这些字段放入用户表中还是创建新表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8681713/

相关文章:

mysql - 为什么当我在 MySQL 中执行 LEFT JOIN 时它不会减少行查找的数量?

mysql - 一个强大的 MySQL 管理工具,具有与 SQL Server Management Studio 类似的功能

ruby-on-rails - 无架构数据库 : Indexing dynamically-typed things by their properties?

android - 更新行时 SQLite 数据库游标错误

sql - 自定义表单生成器的数据库设计(和结果存储)

sql - MySQL 搜索查询

mysql - 按浏览器对用户代理进行分组

php - OrderBy Coupons 基于过期状态 Laravel

php - 如何引用我刚刚插入到 MySQL 表中的行?

mysql - 如何从 MySQL 中选择按创建日期和名称排序的标签,但删除重复的名称?