如何在关系数据库中存储对象?

时间:2013-10-29 14:44:52

标签: mysql sql relational

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

以下是我的问题发挥作用的示例情况。我们假设有一个'用户'表,并且每个用户都需要存储其位置。它们的位置基本上只有3个坐标:x,y,z。

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

或者,我可以添加一个位置'字符串字段到用户行,然后只要我提取/保存用户的位置就可以序列化和反序列化。

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

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

3 个答案:

答案 0 :(得分:1)

鉴于所有情景都有所不同,有时会以微妙的方式存在,因此通常没有“最佳”。

但是,如果你在设计一般的东西时寻找一个整体的“最佳实践”,我会倾向于:

  

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

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

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

答案 1 :(得分:0)

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

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

例如,您是否正在阅读和更新x,y和za批次,如果您必须从进出的每一行的字符串中解析它们,这可能会有所不同,例如,您是否需要一个单独的地点的集合,这样在不同的表中有那些会有所帮助......

答案 2 :(得分:0)

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

我的理由:

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

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

  • 如果要向该位置添加更多数据A(如地址,lat lng,wheater ......),只需编辑表位置添加列,只需编辑一行(而不是100行)。

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

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