【问题标题】:Multiple BOOLEANS or one BIGINT for storing MySQL用于存储 MySQL 的多个 BOOLEAN 或一个 BIGINT
【发布时间】:2021-11-20 14:25:14
【问题描述】:

我有这些订单行,可以是报价或预订类型。在数据库中的 orderLine 级别上,我想跟踪当前行的类型。我可以创建 2 个布尔值 isQuotationisBooking,它们可以是真或假,或者我可以创建一个 type 字段,其中 0 = quotation 等。根据最佳实践,最好的方法是什么?

【问题讨论】:

  • 您的条目可以同时是报价和预订(或您将来发明的一些潜在的附加状态)吗? (或者,换句话说,isQuotation = 1 和 isBooking = 1 是否有意义,或者总是一个状态为真?)
  • @Solarflare 不,它只能同时是一个状态,但是可能会添加更多状态(这可能会使数据库膨胀)

标签: mysql database database-design integer boolean


【解决方案1】:
type ENUM('quotation', 'booking') NOT NULL

允许 2 个选项占用一个字节。它可以通过type = 'booking' 之类的东西进行测试。我通常更喜欢添加第三个选项而不是允许NULL

type ENUM('unknown', 'quotation', 'booking') NOT NULL

对于最多 256 个选项,它仍然需要 1 个字节。

BIGINT 占用 8 个字节;矫枉过正。

type SET('quotation', 'booking') NOT NULL

占用 1 个字节并允许 4 种选择——包括两者都没有。

NULL 可能不需要;只需使用空集。 Set 限制为 64 个独立选项,需要 8 个字节。

有些人不赞成使用ENUM,所以我将提到TINYINT UNSIGNED 作为一个1 字节的替代方案,限制为256 个选项。然后,您可以使用另一个表格将数字映射到人类友好的字符串。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-09-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多