我们正在开发一个 Web 应用程序(Ruby/Rails + Backbone、jQuery、Javascript),用户可以在其中管理图书列表并拖放图书以重新排列列表中的顺序,而列表必须保留。
我们有书籍和名为 booklist 的自定义书籍集合,为此我们有两个表:book 和 booklist。由于一本书可以属于多个图书列表,并且一个图书列表由多本书组成,因此它们具有 m x n 关系,并且我们还有另一个附加表来存储映射。假设我们将其用于所有目的。现在,当用户想要重新订购书架中的书籍时,我们需要存储该订单。
我完全可以理解为什么将 id 存储在列中是邪恶的,对此毫无疑问。如果我们对表进行标准化,并且对于所有其他情况,我们将执行标准操作,该怎么办?
有 相当多 方法 存储附加订单列。但是,即使假设保持了完整性,将书本的 id 存储在书单表中以逗号分隔的列表中似乎仍然是一个糟糕的设计。
我们永远不会遇到这个...
SELECT * FROM users WHERE... OH F@$%CK -
是的,这很糟糕,你不能在不依赖的情况下进行排序、计数、求和(等等),甚至不能做一个简单的报告 使用顶级语言。
因为我们只是像标准方法一样使用连接表根据书单 ID 选择书籍。 (无论如何,我们只是将书籍作为数组作为主干书单模型的一部分)
如果我们检索书单和书单中的书籍,然后根据 CSV 列在客户端(在本例中为 Javascript?)以编程方式进行排序。
它看起来是一个简单的解决方案,因为:
这种方法有什么缺点,这似乎比维护排序顺序并在每次更改顺序时更新其他列,或者使用浮点或权重等更简单。
据我所知,这确实违反了RDBMS的规则,导致开发人员在应用时面临很多困难
JOIN
。