【问题标题】:Should I create a table for only few rows?我应该只为几行创建一个表吗?
【发布时间】:2017-10-26 07:05:23
【问题描述】:

大家好,我在网上没有找到我的问题的任何答案。我的数据库中有一些表只包含几行并且不会有更多。例如:

1- status_orders (payed, declined, shipped, delivered, returned, ...)

2- payment_means (card, cheque, bank transfer, paypal, ...)

知道我有一个多语言网站,我必须创建其他包含翻译的表,这意味着更多的 JOINS...

你认为我应该继续这样做还是简单地使用 PHP 数组并将其密钥存储在数据库中,或者可能有另一种更好的方法来处理这个问题!

非常感谢

【问题讨论】:

    标签: mysql performance database-design


    【解决方案1】:

    我相信将这些值存储在数据库中是一件好事。

    如果另一个系统想要从您的数据库中查询数据,该系统可能会知道这些状态是什么。如果这些状态被封装在您的代码中,情况就不会如此。

    但是,对于翻译,我看到了 3 个选项:

    • 有一个存储它们的表(正如你刚才提到的那样会导致更多的连接)
    • 为表的每个值设置一个字段,并将翻译存储为 JSON 数组格式

      [{language: "fr", value: "Description du type"}, {language: "en", value: "描述类型"}]

    • 将类型的翻译存储在 PHP 代码中

    【讨论】:

    • 感谢 Elferone 的回复。实际上,我们不使用任何可能为这些字段请求我们的数据库的外部系统!对于翻译,我现在使用 2 个表(status_orders 和 status_orders_translations),但希望对其进行优化。但就数据库设计而言,仅将表用于增长数据不是更好吗?
    • 我认为使用表存储这些类型的数据没有任何问题。至于你的翻译表,你可以做一个通用的。在这种情况下,您无需在每次将实体添加到模型时都创建表。只是一个建议!
    • 绝对没有问题,但是我只是听说如果一个表包含永远不会增长的数据,最好换一种方式,因为我们可能有无用的 JOINS 可能会减慢查询速度,那就是为什么我要发布它:)
    【解决方案2】:

    有时有一个表,其中 one 行和 one 列是有意义的。所以,奇数大小的表格有时是“正确使用的东西”。

    PHP 是一个诱人的替代方案,但您将如何“保留”这些信息?如果你可以JOIN这个小表到别的东西,那可能比混合隐喻(SQL和PHP)更简单。

    将数据库视为所有数据的“真实来源”。将您的客户端 (PHP) 视为操纵数据的“业务逻辑引擎”“呈现”它(例如,通过网页)。

    【讨论】:

    • 感谢瑞克的回复。 “保留信息”是什么意思?好吧,在一个包含大约 8 个表的查询中,我运行了一些测试并注意到 JOIN 与 1 或 2 个表增加了约 0.2 秒的查询时间。此外,正在讨论的表格将需要一个额外的表格来进行翻译:/
    • "Persist" 表示将数据保存在某处,以便下次运行程序时记住它。如果什么都不需要保存,那么这一点就没有意义了。 JOIN 不应该添加那么多;让我们看看查询和SHOW CREATE TABLE;也许缺少索引 - 尤其是“复合”索引。
    • 啊,好的,感谢您的解释;)无需保存任何内容,因为这些值不会更改,或者我可能需要添加新的订单状态,但不会再发生一年一次... :) 我现在还没有完成数据库设计,当我完成时我会更新我的初始帖子;)
    • 嘿,我最终会按照您的建议坚持使用数据库中保存的数据 :) 我将有一个新问题:一个订单可以有多个跟踪号,所以我创建了一个新表(orders_trackings) 有 2 列 (order_id, tracking number),所以我应该创建另一个列自动增量,这将是 PK 吗?或将 order_id 和跟踪号设置为 PK?非常感谢
    • 这听起来像是“1:many”关系,它只需要“many”表中“1”表的id。对于“many:many”,auto_inc 是一种浪费。在这里查看我的建议:mysql.rjweb.org/doc.php/… 它对那个复合 PK 说“是”。
    猜你喜欢
    • 1970-01-01
    • 2011-01-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多