【问题标题】:cons of storing comma separated value of ids for custom sort order为自定义排序顺序存储逗号分隔的 id 值的缺点
【发布时间】:2014-03-19 17:22:48
【问题描述】:

我们正在开发一个 Web 应用程序(Ruby/Rails + Backbone、jQuery、Javascript),用户可以在其中管理书单并拖放书以重新排列它们在列表中的顺序,这必须保持不变。

我们有书籍和一个名为 booklist 的自定义书籍集合,为此我们有两个表:book 和 booklist。由于一本书可以属于多个书单,而一个书单由多本书组成,它们具有 m x n 关系,我们还有另一个额外的表来存储映射。可以说我们将其用于所有目的。现在,当用户想要重新订购她书架中的书籍时,我们需要存储该订单。

我完全可以理解why storing ids in a column is evil 的含义,对此毫无疑问。如果我们将表标准化,并且对于所有其他情况,我们将通过标准操作。

arequite a fewapproaches 存储了一个额外的订单列。但是,将书籍的 id 存储在 booklist 表中的逗号分隔列表中似乎仍然是糟糕的设计,即使假设保持完整性。

我们永远不会遇到this...

SELECT * FROM users WHERE... OH F@$%CK - 

是的,这很糟糕,你不能在没有依赖的情况下订购、计数、求和(等等)甚至做一个简单的报告 在顶级语言上。

因为我们只是像标准方法一样使用连接表根据书单 ID 选择书籍。 (无论如何,我们只是将书籍作为一个数组作为主干书单模型的一部分)

那么,如果我们检索书单和书单的书籍,并在客户端(在本例中为 Javascript?)基于 CSV 列以编程方式进行排序。

似乎是一个简单的解决方案,因为:

  • 每次用户重新订购一本书时,我们只需将所有 ID 重新存储在此 one 列中。 (一个用户最多可以在一个书单中拥有 20 到 30 本书)。
  • 我们当然可以简单地忽略无效的 ID,即在创建书单后被删除的书。

这种方法有什么缺点,它似乎比维护排序顺序并在每次更改顺序时更新其他列,或者使用浮点数或权重等更简单。

【问题讨论】:

  • 想早点发布,但我要离线几个星期,所以请原谅我在那之前没有回应

标签: mysql sql database sorting


【解决方案1】:

据我所知,它确实违反了 RDBMS 的规则。这导致在应用 JOIN 时面临许多困难。

希望对你有所帮助。

【讨论】:

  • 谢谢 - 正如我所说,我们不会将此列用于任何类型的连接操作,我们将使用标准 SQL 方法。由于我们使用的是骨干网和导轨,因此这是相当隐式地完成的。
  • 那么没问题。但是你需要经常更新值。
  • 对,我每次都会更新 CSV 列。书单的书列表已经在本地作为 Javascript 数组(书单主干模型的一部分)可用我将 ids 的 CSV 值映射到书的数组,以设置在 UI 中呈现的顺序
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2014-02-19
  • 1970-01-01
  • 2015-12-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多