【发布时间】: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