2011-07-25 54 views
4

我正在实现一个处理Java形状的应用程序。每个用户登录并从MySql数据库检索清单。形状有不同的构造和行为。什么是在数据库中存储形状的最佳方式

那么,什么是最好的方式来存储形状?这里是我的一些想法:

  • 序列化形状并将其存储为Blob。但是如果我必须更改Shape类,那么在DB的大尺寸和查询性能的基础上,我会遇到版本问题
  • 使用常见字段(如宽度和高度)以及表格引用Shape表格的每个形状。这可能会导致大量的表...
  • 将形状表与所有可能的领域,只是把空的形状,这并不需要现场...

你觉得呢?

回答

0

我选择了第二种解决方案,因为易于管理和扩展。序列化选项不实用,因为如果序列化模型的结构发生更改(例如:添加属性),则必须管理模型版本。第三种选择不是构建数据库的正确方法。

1

一些简单的想法:

  • 你可以存储定义多边形顶点的列表。
  • 您可以存储定义多边形边的向量列表。

如何将其存储在数据库中:外形

  • 主表与主键的身份被称为“shapeID”
  • 矢量表,其中的主键标识vectorID,国外关键到适当的ShapeID,原点(x,y,z坐标),方向(x,y,z)和长度。

可以将其他元数据分配给其他表,这些表也可以通过外键引用shapeID。

1

在数据库中存储继承层次结构并没有真正的“最佳”方法。在大多数数据库课程中有三种模型:带有空值的单表,每个子类的表和每个具体类的表。你可以在this blog post找到一个很好的解释。如果您想简单地映射形状在数据库中的属性,则可以选择您喜欢的任何一种。

如果您想要更高级的东西,MySql提供专门设计用于存储几何形状的Geometry type

1

我会投票:

  • 做一个形状表与所有可能的领域:

    • 像的宽度和高度
    • 底和高
    • 半径 ...
    • 形状类型(例如0 =圆形,1 =正方形,3 =三角形,...)
  • 一个表,所有可能的形状,一个形如/行

恕我直言...

问:有多少不同的形状,你认为你可能有?你认为每个形状可能需要多少列?

PS: “多边形”(由任意数量的点组成)可能需要两个单独的表格。但大多数形状(圆形,椭圆形,方形,矩形等)不应超过4或5列/实例,并且应该很容易放在一张表中。

2

技术上不是答案,但也许这里的问题是SQL?我在考虑像CouchDB这样的文档存储系统可能是这种情况下更有效的解决方案。

我想是这样的:

{ 
    "_id": "whatever", 
    "_rev": "whatever", 
    "boundingBox": [ 
     [0 0], 
     [2 2] 
    ], 
    "size": [2 2], 
    "circle": { 
     "center": [1 1], 
     "radius": 1 
    } 

}

"circle"节将改变名称,根据其形状细节。矩形将有角(类似于"boundingBox"),椭圆体将具有...无论如何定义椭圆体:p

相关问题