我在这里读到了许多关于一对一关系、建模对象类型关系等的答案。我正在尝试做一些我只是不确定什么是正确的方法的事情。
我有两个不同的表,它们都需要引用/包含多边形的列表(多边形实际上表示为一个外环和任意数量的内环,以表示曲面上的孔)。这两个表中的每一个都是一组完全不同的属性。
以下是模型的视图,其中只有一个表引用了多边形:
现在我想要第二个表,每一行也代表一个多边形的集合。从面向对象的角度来看,我知道如何做到这一点,但是关系视图让我对什么是正确的方式感到困惑。
一种方法是向polygonwitholes表中添加另一个外键,其中一个是null,而另一个是填充的。如下所示:
这看起来不太对劲。所以我考虑了中间表,但是关系看起来更像是面向对象的,而不是关系关系。这是一种不合理的方式吗,在这些外键上进行非此即彼的操作?或者,我可以有一个整型字段,并且不向数据库添加任何约束,即它是另一个表的外键,并将其用于当时使用的任何表?从查询的角度来看,我必须检索table1或table2中行的每个多边形中的所有点。
因此,我提出的一个选择是这样的,但是当我思考如何进行查询时,有些事情看起来不太对劲:
我知道对于一个真正的数据建模师来说,这将是一个显而易见的问题!这个网站对我来说很棒,这是我的第一个问题,我希望它有意义!那么,对于应该如何建模,有什么建议吗?
(好的,我试着发布,但是图片没有出现。我会试着让别人帮我把它们贴出来)
发布于 2011-03-01 17:26:53
因此,我在咨询了人们之后做出了决定。
我使用了第三范式,并制作了中间表,将曲面连接到多边形,将网格连接到多边形。最终的解决方案如下表所示:
表面(ID主键)
SensorGrid (ID主键)
多边形(ID主键)
Point(ID主键,PolygonID外键)
Surface_Polygon(surfaceID,polygonID:复合主键)
SensorGrid_Polygon(sensorGridID,polygonID:复合主键)
因此,两个中间表将多边形绑定到它们是在网格中还是在曲面中。我将检查以确保额外的联接不会对性能产生太大影响。这是最干净的解决方案,如果将来确实需要优化性能,我会考虑为SurfacePolygon、SurfacePoint、SensorPolygon和SensorPoint创建单独的表,并去掉中间表。
谢谢你的帮助。
发布于 2011-02-21 04:07:01
好了,我要试一试了。如果这真的是1比1,并且给定的PolygonwithHoles不能既是曲面又是网格,那么我会使用你的最后一个例子,但我会删除容器表,因为它是完全多余的。如果出于某种原因,您希望将所有的多边形孔作为曲面和网格,则可以始终使用sql联合来创建该表。
https://stackoverflow.com/questions/5061334
复制