【问题标题】:Using a table to provide enum values in MySQL?使用表在 MySQL 中提供枚举值?
【发布时间】:2010-01-21 04:26:09
【问题描述】:

有没有办法将 MySQL 表的列内容之一映射到 MySQL 中另一个表的枚举?我认为这很容易,但我似乎找不到任何关于该主题的信息。

关于这个问题的任何建议或帮助都会很酷,如果不可能,有没有人知道它不可能的内部原因?

大家好:)

加里

【问题讨论】:

    标签: sql mysql database enums


    【解决方案1】:

    enum 类型作为一次性的很方便,但它不能很好地扩展到多个表,也不是标准的 SQL。 最好的办法是使用普通的表和关系:

    1. 定义一个新表来保存可能值的列表;我们称它为 Master1
    2. 在另外两个表(我们称它们为 Table1 和 Table2)中,不要将字段设为 enum;只需将其设为与 Master1 具有 外键关系 的普通字段即可。

    外键关系将完成限制为可能值列表的工作;而且由于外键和关系绝对是标准 SQL,这种方法还有其他好处 - 例如报告工具可以识别外键并了解如何使用相关数据。

    【讨论】:

    • 枚举表Master应该除了枚举值之外还有单独的主键,还是只有枚举值?我认为定义单独的主键几乎没有什么好处。
    • 是的,我认为枚举值本身会成为理想的主键。你知道它将是唯一的,它使外键值在其他表中更容易识别。
    【解决方案2】:

    不做就别做

    当然,您只需要一个可能的键表,然后是一个外键映射到该表。

    如果您想要一个具有可能枚举值和限制的表,请通过另一个表或同一个表中的 groupid 进行分组(如果组成员是唯一的)。

    虽然 JOIN 明智,但闻起来像桌子臭味。也许最好在存储过程或应用程序代码中执行此操作并将其映射到本机值?

    【讨论】:

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