为自定义排序顺序存储 ids 的逗号分隔值的缺点

问题描述 投票:0回答:1

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

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

我完全可以理解为什么将 id 存储在列中是邪恶的,对此毫无疑问。如果我们对表进行标准化,并且对于所有其他情况,我们将执行标准操作,该怎么办?

相当多 方法 存储附加订单列。但是,即使假设保持了完整性,将书本的 id 存储在书单表中以逗号分隔的列表中似乎仍然是一个糟糕的设计。

我们永远不会遇到这个...

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

是的,这很糟糕,你不能在不依赖的情况下进行排序、计数、求和(等等),甚至不能做一个简单的报告 使用顶级语言。

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

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

看起来是一个简单的解决方案,因为:

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

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

mysql sql database sorting
1个回答
1
投票

据我所知,这确实违反了RDBMS的规则,导致开发人员在应用时面临很多困难

JOIN

© www.soinside.com 2019 - 2024. All rights reserved.