SET
复制具有超过 64 个成员的 MySQL col 类型的行为的最佳方法是什么?
我需要做我自然会SET
用大约 85 个不同选项的 MySQL 做的事情。(限制为 64。)实现这一点的最佳方法是什么?
我看过这个问题,它建议 a JOIN
,但我的成员只有 6 个字符的字符串,是真正创建这些成员的全新 1 列表的最有效方法(我将其称为表 2) ,然后是 2 个列的第三个表,将表 1(我将在其中创建SET
列)和表 2中的 id 链接起来?
规范化为使用 的第二个表ENUM
:
从这样的单表设计:
ID
, ...,Set_Col
对这些:
ID
, ...Table1_ID
表2:,Enum_Col
然后,您可以从 Table1 PK ( ID
) 与“集合”中的值建立零个或多个关系,“集合”现在不是集合,而是标准化ENUM
值。您获得了 aSET
或aENUM
的多重性的空间优势SET
,但您克服了 64 个成员的限制SET
。
由于您已经有了这些 6 个字符的字符串,因此将来会出现必须将它们放入结果集中的情况,因此我会将它们放入单独的表中并使用“JOIN + 连接表”的方法。
如果没有为 set 的元素提供字符串,那么我将在 SQL 中实现一个布尔数组。有多种解决方案可以做到这一点,请查看这个 SO question。