mysql - SQL 数据库设计 - 小比例的唯一行

标签 mysql sql database

假设我有一个简单的产品表: ID、产品代码、价格、描述等

我有 10,000 个产品...但其中 100 个需要声音样本(例如,它们是木琴)。 我想在数据库中存储产品是否有声音样本。

因此,最好将产品表存储为“has_sound” bool 值(真或假)列,还是存储为仅列出所有带有声音的产品 ID 的单独单列表?

存储在产品表中意味着绝大多数只会有“has_sound = false”,这似乎有点浪费。 但仅存储“有声音的产品”列表对我来说似乎也有点“错误”。

非常感谢:)

最佳答案

您有 10,000 行。

即使您选择低效的 4 字节字段大小,您也会通过向产品表添加字段来查看磁盘上大约 40k 的所有内容。相比之下,具有 (int, tinyint) 字段的空 innodb 表在磁盘上的大小约为 100k(加上用于保存表元数据的额外 RAM 开销)。用 100 条记录填充该表没有什么区别,因为所有内容都适合一个分配页。

这些开销都远不足以成为性能考虑因素。

为下一个开发人员做一些让代码最清晰、最简单且最易于维护的事情(在本例中是在产品表上存储一个额外的字段)。

关于mysql - SQL 数据库设计 - 小比例的唯一行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38716078/

相关文章:

php - 设计这个基本 SQL 表示例的最佳方法是什么?

sql - 管理 SQLite 数据库子集版本

php - 仅在一个 SQL 查询中检索所有类别、子类别、子子类别等的完整列表

php - Laravel 5 数据透视表问题

mysql - 改变 SQL 表 - 允许 NULL 列值

sql - 我们如何在 sum()/group by 查询中选择多个列?

mysql - 如何在 MySQL 中连接非规范化表?

php - codeigniter 事件记录查询 with where

mysql - 如果在另一个表上匹配,则排除一个表中的行 - MySql

database - 流复制和逻辑复制的区别