几乎或半空的列宽或比另一个表更好?如何快速编码或节省空间的 sql?

Posted

技术标签:

【中文标题】几乎或半空的列宽或比另一个表更好?如何快速编码或节省空间的 sql?【英文标题】:Is an almost or half empty colum worth or better than another table? How to code fast or spacesaving sql? 【发布时间】:2019-10-01 20:38:57 【问题描述】:

我想知道如何在不同的数据库设计解决方案之间做出决定? 我想最好的描述我的问题是举一个例子。 假设我们要为汽车创建一个数据库。每辆汽车都有许多我们想要保存的属性。 每辆车都有很多属性,例如: 制片人、模特、颜色、年龄、... 但这里也有仅在子类别或一小部分汽车中找到的属性,例如: 牵引杆、车顶行李架、货物区、四轮驱动、... 一些属性甚至可能只与不到 5% 的汽车相关。有不同的解决方案可以解决这个问题。 - 第一个是将所有内容转储到一个表中。当然归一化! (以下未提及) - 第二种解决方案是创建一个表格,其中包含每辆车都有的属性。添加 CartoDrawbar ... 表以在稀有属性和汽车之间建立 m:m 连接。 - 我能想象的第三种可能性是为 SUV、Notchback、卡车、紧凑型、皮卡等汽车组创建表格......以对具有相似属性的汽车进行分组。 (我的稀有属性不是与此类似的最佳选择)。 - 最后一个想法是创建一个包含所有共享属性的表格,并添加一个字符或文本列来填写所有特殊内容。 但哪个是最好的解决方案或合适的解决方案?我忘了一个重要的吗?速度、文件大小或......是否有差异需要考虑?或一些阈值何时选择这个或那个解决方案。我有一个个人最喜欢的,但我不想影响你,而且我对关系数据库和/或管理软件没有足够的知识来判断表格的速度或文件大小。

【问题讨论】:

检查这个副本:***.com/a/3579462/2469308 还有另一个副本:***.com/a/190306/2469308 您好,感谢您的帖子。我不得不承认我没有搜索“代表继承”。我通读了这两个问题,但没有得到答案。 @daniel-vassallo 写了关于利弊的文章,但只是关于“代码是否干燥”,“使用起来有多困难”,...... 没有提及不同解决方案在基准测试中的表现如何. 它们对大数据的可扩展性如何... 【参考方案1】:

没有“最佳”解决方案。事实上,您的大多数“稀有”列看起来更像是旗帜——一辆汽车有或没有四轮驱动,一辆汽车有或没有车顶行李架。

我的建议是把这些放在一个表格中,用不同的列,适当的类型。

然后,如果您确实有可选功能,例如手动变速器中的齿轮数,那么您可以考虑如何实现列表。如今,大多数数据库都支持 JSON,这将是此类元素的自然选择。

【讨论】:

使用 JSON 是个好主意。创建另一个解决方案。将不得不尽快尝试。 你说得对,我的稀有属性或属性的例子很差。让我们说四轮驱动模型。如果我添加一列,我的问题是数据库会为每个空/Null 值保留空间吗?下一步将是自己的属性表 Table FourWheel (CarId int, Model char); 但是现在模型没有被规范化,导致一个三表解决方案来表示 m:m 连接。使处理变得更糟,并创建了很多也消耗空间的键。 空间被保留,通常甚至用于NULL 值。但是,对于 tinyints 或 varchar(),它可能非常小。

以上是关于几乎或半空的列宽或比另一个表更好?如何快速编码或节省空间的 sql?的主要内容,如果未能解决你的问题,请参考以下文章

如何使多个 html 表具有相同的列宽

为漂亮表中的列设置列宽

如何在文本输入期间在 Excel 中自动调整列宽

更改反应表中的列宽

excel小技巧之快速调整行高列宽 如何快速调整行高列宽

同步两个不同框架中表格之间的列宽等