何时添加列与添加相关的 table?
When to add a column vs adding a related table?
我有一个很大的 table,有超过 1 亿行。几个月来我一直在削减它,以消除不良数据(明智的行),试图保持它的小。关于这个 table,我已经有 9 个专栏了。我想向其中添加一个新的布尔列。以下是当前状态。
这个 table 一开始很小,现在越来越宽了。再一次,我的任务是每行添加更多信息。这次是一个新的布尔字段。我预计此字段的音量较低,这意味着不到 10% 的人会将此设置为 true。我知道我可以使它默认为 null,它是一个应该很小的布尔列。
不过,我想得到一些建议。 table 不能无限宽,我需要解决这个问题。在这种情况下,当我要添加其他数据时,创建另一个 table 和外键引用记录是否更有意义?专业人士如何在数据库设计中处理这个问题?
可用性的最佳情况是将所有数据都记录在案,这样任何形式的查询都可以在 table 本身上获取或计算,而无需连接。我只是不相信它会扩展到 10 亿行(插入模因)。
在我的工作中,我支持 MySQL 个具有数十亿行 table 的实例。在这种规模下,必须注意适当优化查询。您不想在那个比例下进行 table 扫描。
但那是关于行,而不是列。您首先询问的是列。
选择添加一列还是添加另一列 table 的方法是遵循 rules of database normalization。如果新列用于与当前 table 相同实体的属性,请将该列添加到 table。如果它是一个多值属性或者它确实是某个其他实体的属性,则将其添加到不同的 table.
极少数情况下,仅仅为了拥有太多列而另行选择 table 并不是正确的选择。一个给定的 MySQL table 可以很容易地有几十个列,如果你小心的话可以有数百个。
理论上,就规范化而言,对于可能适合放入同一 table 中的列数没有限制。但是由于在给定实现中存储这些列的代码存在局限性(例如 MySQL 中的 InnoDB 存储引擎)。
So the maximum number of columns for a table in MySQL is somewhere between 191 and 2829, depending on a number of factors.
在那个博客的评论中,我能够设计一个 table 在 59 列创建失败。阅读博客了解详情。
我有一个很大的 table,有超过 1 亿行。几个月来我一直在削减它,以消除不良数据(明智的行),试图保持它的小。关于这个 table,我已经有 9 个专栏了。我想向其中添加一个新的布尔列。以下是当前状态。
这个 table 一开始很小,现在越来越宽了。再一次,我的任务是每行添加更多信息。这次是一个新的布尔字段。我预计此字段的音量较低,这意味着不到 10% 的人会将此设置为 true。我知道我可以使它默认为 null,它是一个应该很小的布尔列。
不过,我想得到一些建议。 table 不能无限宽,我需要解决这个问题。在这种情况下,当我要添加其他数据时,创建另一个 table 和外键引用记录是否更有意义?专业人士如何在数据库设计中处理这个问题?
可用性的最佳情况是将所有数据都记录在案,这样任何形式的查询都可以在 table 本身上获取或计算,而无需连接。我只是不相信它会扩展到 10 亿行(插入模因)。
在我的工作中,我支持 MySQL 个具有数十亿行 table 的实例。在这种规模下,必须注意适当优化查询。您不想在那个比例下进行 table 扫描。
但那是关于行,而不是列。您首先询问的是列。
选择添加一列还是添加另一列 table 的方法是遵循 rules of database normalization。如果新列用于与当前 table 相同实体的属性,请将该列添加到 table。如果它是一个多值属性或者它确实是某个其他实体的属性,则将其添加到不同的 table.
极少数情况下,仅仅为了拥有太多列而另行选择 table 并不是正确的选择。一个给定的 MySQL table 可以很容易地有几十个列,如果你小心的话可以有数百个。
理论上,就规范化而言,对于可能适合放入同一 table 中的列数没有限制。但是由于在给定实现中存储这些列的代码存在局限性(例如 MySQL 中的 InnoDB 存储引擎)。
So the maximum number of columns for a table in MySQL is somewhere between 191 and 2829, depending on a number of factors.
在那个博客的评论中,我能够设计一个 table 在 59 列创建失败。阅读博客了解详情。