mysql - 我应该为具有相似结构的数据单独制作一个表吗

标签 mysql sql database database-design

我有许多表包含其“类型/类别/组”字段。该字段引用其各自的表,例如:

item -> item_category、queue ->queue_group、stock -> stock_type、account -> account_type、病人 -> Patient_type 等。它们都具有完全相同的表结构。这是一个简单的例子:

+---------------+---------------+
| name          | type          |
+---------------+---------------+
| id            | INT(AI)       |
| name          | VARCHAR(255)  |
| description   | TEXT          |
+---------------+-------------- +

问题是,我应该为每个数据引用(item_category、queue_group、stock_type、account_type、病人类型等)创建单独的表,还是应该为所有这些数据创建一个引用表? 例如:

+---------------+---------------+
| name          | type          |
+---------------+---------------+
| id            | INT(AI)       |
| source        | INT           |
| name          | VARCHAR(255)  |
| description   | TEXT          |
+---------------+-------------- +

“source”字段是一个简单的实现示例,用于定义记录属于哪个表。

目的是让那些项目、类别、队列等数据可以在同一个表中查找其“类型/类别/组”字段,以达到少表。我应该使用什么以及每种方法的优缺点是什么?

最佳答案

选择一个或多个引用表实际上是相当任意的。遵循规范化规则,“正确”的选择是为每个引用表提供一个单独的表。这是一个非常合理的做法。

将所有名称放入一个表中可能会提高或降低性能。假设名称的数量为数百甚至数千,那么索引将提供足够的性能——单个较大表的性能影响应该与多个表的性能影响大致相同。实际上,某些查询的性能有可能提高。小引用表通常比数据页小得多,因此一堆小表比大表占用更多的页面。再次强调,虽然对性能有好处,但从性能角度来看,缓存中一些页面的丢失通常不会很明显。

使用单个表的一个重要原因是为了管理此类代码。例如,如果有国际化计划(支持多种语言),那么将代码放在一处会非常有帮助。同样,如果您决定对描述做出一揽子决定(例如,不允许使用缩写或您想添加简短的描述),那么将它们放在一个地方会很有帮助。或者,如果您决定将描述从单字节字符更改为国家字符集,那么将它们放在一个位置会有所帮助。

我的结论是,与多个引用表相比,为此目的使用单个引用表对性能的影响最小(除非您正在处理大量代码)。默认方法是单独的表,这是标准化方面的“正确”方法。但是,如果您有理由希望将所有代码放在一个地方,那么这是完全可行的,也是一个合理的解决方案。

关于mysql - 我应该为具有相似结构的数据单独制作一个表吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26562664/

相关文章:

MySQL将timediff输出转换为日、时、分、秒格式

php - Laravel 加载更多未按预期工作

php - 在 SQL 中通过 SELECT AS 语法使用数组和循环

sql - 非原子值 SELECT 是特定于 SQL Server 的还是可能在其他 DBMS-es 中?

mysql - 我怎样才能用SQL得到这两个郊区呢?

mysql - 从具有大量数据的 2 个 Mysql 表中获取未处理的数据

R中的sqlSave以创建数据帧并将其保存到sql表

mysql - 这个sql让我有点复杂

database - 十亿的三倍有多大?

SQLSTATE[22P02] : Invalid text representation