我正在实现一个处理Java Shapes的应用程序。每个用户登录并从MySql数据库中检索库存。形状有不同的构造函数和行为。
那么,存储形状的最佳方法是什么?这是我的一些想法:
您怎么看?
答案 0 :(得分:2)
技术上不是答案,但也许这里的问题是SQL?我认为像CouchDB这样的文档存储系统可能是这种情况下更有效的解决方案。
我在想这样的事情:
{
"_id": "whatever",
"_rev": "whatever",
"boundingBox": [
[0 0],
[2 2]
],
"size": [2 2],
"circle": {
"center": [1 1],
"radius": 1
}
}
"circle"
节将根据形状更改名称和详细信息。矩形会有角(类似于"boundingBox"
),椭球会有...无论什么定义椭球:p
答案 1 :(得分:1)
一些简单的想法:
如何将它们存储在数据库中:
可以将其他元数据分配给具有其他表的形状,这些表也通过外键引用shapeID。
答案 2 :(得分:1)
实际上,没有一种“最佳”方法可以在数据库中存储继承层次结构。大多数数据库课程都教授3种模型:带有空值的单表,每个子类的表和每个混凝土类的表。你可以在this blog post找到一个很好的解释。如果您只想在数据库中映射形状的属性,则可以选择您喜欢的任何一个。
如果你想要更高级的东西,MySql提供专门用于存储几何形状的Geometry type。
答案 3 :(得分:1)
我投票:
创建一个包含所有可能字段的Shape表:
一张桌子,所有可能的形状,一个形状实例/行
... IMHO
问:你认为你有多少种不同的形状?您认为每个形状可能需要多少列?PS: “多边形”(由任意数量的点组成)可能值得两个单独的表。但大多数形状(圆形,椭圆形,正方形,矩形等)不应超过4或5列/实例,并且应该很容易放在一个表中。
答案 4 :(得分:0)
我选择了第二种解决方案,因为它易于管理和扩展。序列化选项不实用,因为如果序列化模型的结构发生变化(例如:添加属性),我必须管理模型版本。第三种选择不是构建数据库的正确方法。