【问题标题】:How to store objects in a relational database? [closed]如何在关系数据库中存储对象? [关闭]
【发布时间】:2013-10-29 14:44:52
【问题描述】:

之前有人问过类似的问题,但没有得到回答。 How to store value objects in a relational database?

这是我的问题发挥作用的示例情况。假设有一个“用户”表,每个用户都需要存储他们的位置。它们的位置基本上只有 3 个坐标:x、y、z。

但是,我不确定我应该怎么做。我可以在名为 'x, y, z' 的 'user' 行中添加 3 个整数字段。

或者,我可以在用户行中添加一个“位置”字符串字段,然后在获取/保存用户位置时简单地序列化和反序列化。

或者,我可以创建一个 'locations' 表,它有一个 auto-inc 主键 id,将用作 'users' 位置数据库的外键,它有 4 个字段:'id'、' x','y','z'。

那么,哪一个最好?也许有一个我没有看到更好的答案?谢谢。

【问题讨论】:

  • 几乎从来没有真正的“最佳”。
  • "...但没有人回答":嗯,now it is! ;)

标签: mysql sql relational


【解决方案1】:

通常没有“最佳”,因为所有场景都不同,有时方式很微妙。

但是,如果您在设计一般事物时正在寻找整体“最佳实践”,我倾向于这样做:

尽可能做最简单的事情,只在需要时增加复杂性。

为此,我认为Users 表中的三个整数列是有意义的并且非常简单。您是否需要将数据序列化为字符串?毕竟,数据本身不是字符串。它是一组数值。这可能会使其他事情变得不必要地困难,不是吗?数据是否需要位于具有自己标识符的单独表中?毕竟,它本身并不是一个真正的实体,而只是一个描述 User 的数据点。

除非有令人信服的理由去做更复杂的事情,否则请保持简单。

【讨论】:

    【解决方案2】:

    在我看来,标准化会更好。

    当然,没有最好的方法,因为这取决于工作负载(您将对这些表运行的查询)、数据本身等等......

    例如,您是否会经常阅读和更新 x、y 和 z,如果您必须为每一行进出的字符串从字符串中解析它们,这可能会有所不同,您是否需要单独的位置的集合,这样将它们放在不同的表中会有所帮助,等等...

    【讨论】:

      【解决方案3】:

      考虑到用户需要存储比 x、y、z 更多的数据,我会使用您的第 3 个选项。如果不是,我会更改该表的名称...

      我的理由:

      • 数据库的可读性:¿什么代表用户的 x y z?什么代表位置的 x y z?最后一个听起来更直观

      • 如果 100 个用户位于同一位置 A,您只需将这 100 个用户指向该位置 A。

      • 如果您想向该位置 A 添加更多数据(如地址、纬度、经纬度、小麦...),只需编辑表位置添加列,然后只需编辑一行(而不是 100 行)。

      • 您可以将存储在位置上的所有数据用于其他目的。如果您最近还需要存储其他实例,如建筑物、车辆等。您已经准备好所有结构,甚至您当前的数据也可以使用

      简报 我发现最后一个比其他两个更具可读性、可扩展性和灵活性。但这取决于我猜你的项目范围

      【讨论】:

        猜你喜欢
        • 2015-03-21
        • 2010-11-26
        • 1970-01-01
        • 2022-11-17
        • 2010-09-26
        • 2012-09-06
        • 1970-01-01
        • 1970-01-01
        • 2014-08-18
        相关资源
        最近更新 更多