【问题标题】:Should I make separate table for data with similar structure我应该为具有相似结构的数据制作单独的表格吗
【发布时间】:2015-12-28 22:41:41
【问题描述】:

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

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

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

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

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

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

目的是让那些item、category、queue等数据可以在同一张表中查找其“type/category/group”字段,实现少表。我应该使用什么以及每种方法的优缺点是什么?

【问题讨论】:

    标签: mysql sql database database-design


    【解决方案1】:

    选择一个或多个参考表实际上是相当随意的。遵循规范化规则,“正确”的选择是为每个参考表设置一个单独的表。这是一个非常合理的做法。

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

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

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

    【讨论】:

    • 谢谢。就我而言,我没有使用单表的特殊原因,我只是想看看将所有记录放在一个表中而不是在多个表中的性能方面。幸运的是,在 PHP 方面,我可以只制作一个特定的模型库来处理这些数据,所以我不必为每个表编写冗余代码。
    猜你喜欢
    • 1970-01-01
    • 2014-03-24
    • 2023-03-15
    • 1970-01-01
    • 2012-06-20
    • 2018-03-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多