我有很多对象,每个对象可以有许多不同类型的属性。很多属性重叠,例如,许多对象具有属性“名称”。由于有许多类型的对象,如果有一个表为每组具有相同属性的对象构建,它将需要很多表。
目前我正在使用 mysql,它是这样存储的。
object_id|attribute_id|data
有几个这样的表,不同的表有不同类型的数据。例如,在 Integer 表中,它只存储整数
所以我可以将所有类型的对象存储在系统中,仍然可以根据属性数据进行过滤和排序。它使查询更加复杂,我不认为它是有效的。
这是在 mysql 或其他关系数据库中执行此操作的唯一方法吗?我应该尝试查找此问题的其他数据库模型吗?
编辑我做了一些研究,似乎我需要的是一个具有 SQL 功能的面向文档的数据库。
我认为您要做的是研究称为“对象关系映射”的领域。它是一个很大的领域,有很多解决方案。有些是在框架中使用的,例如 Rails 中使用的“”ActiveRecord。
您的设计称为 Object-Attribute-Value (O)。它是将对象映射到关系数据库的一种方法。它通常非常慢,但非常灵活。如果你的类定义不断变化 (或动态变化) 这可能是你唯一的选择。
您可以使用 Object-Relational-Mapping (ORM)。这是将对象制作到关系数据库的另一种方法。它要快得多,而且灵活性稍差。如果您的类定义不经常更改 (并且不动态更改),这是一个更好的选择。
使用一个表是可能的,而且可能更可取。为所有对象类型的每个属性设置一个表列。然后再添加一列以指示“对象类型”。您可以通过对具有特定对象类型名称的行的简单查询,从表中获取一种类型的所有对象。
本站系公益性非盈利分享网址,本文来自用户投稿,不代表边看边学立场,如若转载,请注明出处
评论列表(42条)