我正在实现一个处理Java形状的应用程序。每个用户登录并从MySql数据库检索清单。形状有不同的构造和行为。什么是在数据库中存储形状的最佳方式
那么,什么是最好的方式来存储形状?这里是我的一些想法:
- 序列化形状并将其存储为Blob。但是如果我必须更改Shape类,那么在DB的大尺寸和查询性能的基础上,我会遇到版本问题
- 使用常见字段(如宽度和高度)以及表格引用Shape表格的每个形状。这可能会导致大量的表...
- 将形状表与所有可能的领域,只是把空的形状,这并不需要现场...
你觉得呢?
我正在实现一个处理Java形状的应用程序。每个用户登录并从MySql数据库检索清单。形状有不同的构造和行为。什么是在数据库中存储形状的最佳方式
那么,什么是最好的方式来存储形状?这里是我的一些想法:
你觉得呢?
我选择了第二种解决方案,因为易于管理和扩展。序列化选项不实用,因为如果序列化模型的结构发生更改(例如:添加属性),则必须管理模型版本。第三种选择不是构建数据库的正确方法。
一些简单的想法:
如何将其存储在数据库中:外形
可以将其他元数据分配给其他表,这些表也可以通过外键引用shapeID。
在数据库中存储继承层次结构并没有真正的“最佳”方法。在大多数数据库课程中有三种模型:带有空值的单表,每个子类的表和每个具体类的表。你可以在this blog post找到一个很好的解释。如果您想简单地映射形状在数据库中的属性,则可以选择您喜欢的任何一种。
如果您想要更高级的东西,MySql提供专门设计用于存储几何形状的Geometry type。
我会投票:
做一个形状表与所有可能的领域:
一个表,所有可能的形状,一个形如/行
恕我直言...
问:有多少不同的形状,你认为你可能有?你认为每个形状可能需要多少列?
PS: “多边形”(由任意数量的点组成)可能需要两个单独的表格。但大多数形状(圆形,椭圆形,方形,矩形等)不应超过4或5列/实例,并且应该很容易放在一张表中。
技术上不是答案,但也许这里的问题是SQL?我在考虑像CouchDB这样的文档存储系统可能是这种情况下更有效的解决方案。
我想是这样的:
{
"_id": "whatever",
"_rev": "whatever",
"boundingBox": [
[0 0],
[2 2]
],
"size": [2 2],
"circle": {
"center": [1 1],
"radius": 1
}
}
的"circle"
节将改变名称,根据其形状细节。矩形将有角(类似于"boundingBox"
),椭圆体将具有...无论如何定义椭圆体:p