我们正在使用一个Web应用程序(Ruby / Rails + Backbone,jQuery,Javascript),用户可以在其中管理书单并拖放书籍以重新排列列表中的顺序,这必须保留。
我们有书籍和一本名为booklist的书籍自定义集合,我们有两个表:书和书单。由于一本书可以属于多个书单,并且书单由多本书组成,因此它们具有m×n关系,并且我们还有另一个表来存储该映射。让我们说我们将它用于所有目的。现在,当用户想要在她的书架中重新订购书籍时,我们需要存储该订单。
我完全可以看到why storing ids in a column is evil的感觉,对它毫无疑问。如果我们将表标准化,并且对于所有其他情况,我们将通过标准操作。
are quite a few approaches有关存储其他订单列的信息。但是,即使假设保持完整性,将书籍的ID存储在书单列表中的逗号分隔列表中仍然是不好的设计。
我们永远不会遇到this ......
SELECT * FROM users WHERE... OH F@$%CK -
是的,这很糟糕,你不能在不依赖的情况下订购,统计,求和(等)甚至做一个简单的报告 在顶级语言上。
因为我们只是使用连接表(如标准方法)根据booklist id选择书籍。 (无论如何,我们只是将书籍作为一个阵列作为骨干书单模型的一部分)
那么,如果我们检索书单的书单和书籍,基于CSV列以编程方式在客户端(在本例中为Javascript?)进行排序。
出现是一个简单的解决方案,因为:
这种方法有哪些缺点,这似乎比维护排序顺序和每次更改订单时更新其他列,或使用浮点数或权重等更简单。
答案 0 :(得分:1)
据我所知,它确实违反了RDBMS的规则。在应用JOIN
时,这会导致许多困难。
希望它会对你有所帮助。