gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 00:17:23 26 4
gpt4 key购买 nike

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

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

我完全明白 why storing ids in a column is evil 的意义,毫无疑问。如果我们对表进行规范化,并且对于所有其他情况,我们将通过标准操作会怎样。

are quite a few approaches存储额外的订单列。但是,即使假设保持完整性,将图书的 ID 存储在图书列表中以逗号分隔的列表中,这仍然是一个糟糕的设计。

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

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

Yes it's bad, you can't order, count, sum (etc) or even do a simple report without depending on a top level language.

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

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

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

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

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

最佳答案

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

希望对你有所帮助。

关于mysql - 为自定义排序顺序存储 id 的逗号分隔值的缺点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22500827/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com