代码之家  ›  专栏  ›  技术社区  ›  Blaine

在表中存储/检索数组的最佳方法

  •  0
  • Blaine  · 技术社区  · 17 年前

    我目前在MySQL中有一个通常存储值的表,但是我想在该表中添加一个字段来存储一个值数组,比如cities。我应该简单地将数组存储为csv吗?每一行都需要它自己的数组,所以我对创建一个新表以及为前一个表中插入的每一行插入2-5行感到不安。

    我觉得这种情况应该有个名字,我就是想不起来了:)

    编辑

    元素数-2-5(从城市动态列表中选择,数组引用列表,即表)

    此字段不需要可搜索,只需与其他数据一起检索即可。

    5 回复  |  直到 17 年前
        1
  •  1
  •   Jeremy    17 年前

    “正确”的方法是使用另一个保存每个值的表,但是由于您不想执行该路由,因此分隔列表应该可以工作。只需确保选择一个不会在数据中显示的分隔符。您还可以将数据存储为XML,这取决于您计划如何与数据交互,这可能是一个更好的路径。

        2
  •  1
  •   TheTXI    17 年前

    我将使用包含逗号(或其他逻辑分隔符)分隔值的字段的想法。只需确保您的字段足够大,可以容纳最大数组大小。然后,当拉出字段时,应该很容易使用分隔符对长字符串执行explode(),然后该分隔符将立即在代码中填充数组。

        3
  •  0
  •   Kluge    17 年前

    也许你要找的词是“正常化”。与中一样,将数组移动到一个单独的表中,该表通过键链接到第一个表。这有几个优点:

    • 阵列大小几乎可以无限增长

    • 高效存储

    • 无需使用“like”即可在数组中搜索值

    当然,是否规范化此数据的决定取决于许多您没有提到的因素,例如元素的数量、数字是否固定、元素是否需要可搜索等。

        4
  •  0
  •   BrynJ    17 年前

    你的应用程序是PHP吗?可能值得研究功能 serialize unserialize .

    这两个函数允许您轻松地将数组存储在数据库中,然后稍后重新创建该数组。

        5
  •  0
  •   dr Hannibal Lecter    17 年前

    正如其他人提到的,另一张桌子是 适当的 走的路。

    但如果你真的不想那样做(?),假设您在MySQL中使用PHP,为什么不使用 serialize() 并存储一个序列化值?