哪个关系模型更适合这个例子?
Posted
技术标签:
【中文标题】哪个关系模型更适合这个例子?【英文标题】:Which relational model is better for this example? 【发布时间】:2011-11-16 05:20:54 【问题描述】:这是面向 OOP 数据库的关系模型,哪个更好?:
注意:->此操作数用于定义外键,如(field->table(reference))
第一
**
属性 (id:auto, 属性名)
type
(id:auto, type_name)
type_attribute
(id:auto, type_code->type(id), attribute_id->attribute(id), default_value)
object
(id:auto, name, object_type->type(id))
object_property
(id:auto, object_id->object(id), attribute_id->attribute(id), my_value)
**
第二
属性(id:auto,attribute_name)
类型(id:auto, type_name)
type_attribute (id:auto, type_code->type(id), attribute_code->attribute(id), default_value)
object (id:auto, name, object_type->type(id))
object_property (id:auto, (object_id, object_type)->object(id,object_type), (object_type, attribute_id)->type_attribute(id, attribute_id), my_value)
在 object_property 表中确实可以清楚地看到差异。
在第一个模型中,您可以使用代码和属性代码定义属性,这里的问题是您可以定义类型未定义对象类型的属性的元素。然而,这个模型最容易使用,因为要定义一个 object_property,你只需要两个代码,比如:
INSERT INTO object_property(object_code, attribute_code, my_value)
VALUES (3,4,'myvalue')
在第二个模型中,您可以使用 object_code、object_type 和 attribute_code 使用更一致的数据来定义属性。但是,您需要使用三个代码和额外的查询,如下所示:
INSERT INTO object_property(object_code, object_type, attribute_code)
VALUES (3, (select object_type from object where code = 3), 4, 'my_value')
哪个更好?
【问题讨论】:
这两个答案都不是可接受的吗?说真的,关系数据库并非设计为面向对象的。这将表现得非常糟糕,并且是一个要编码的 PITA。 【参考方案1】:您是说“关系模型”吗?只有一种关系模型:
我们从未改变关系模型的公理。我们做了 多年来,模型本身发生了一些变化——例如, 我们添加了关系比较——但是公理(基本上是 那些经典谓词逻辑)从那以后一直保持不变 科德的第一篇论文。而且,发生了什么变化 在我看来,本质上是进化的,而不是革命的。因此,我 确实声称只有一个关系模型,即使它有 随着时间的推移而演变,并且可能会继续这样做。
SQL and Relational Theory: How to Write Accurate SQL Code By C. J. Date
【讨论】:
以上是关于哪个关系模型更适合这个例子?的主要内容,如果未能解决你的问题,请参考以下文章
Django - 按模型名称获取 ContentType 模型(通用关系)
如何将现有的关系数据库模型转换为适合无 sql 数据库的模型(如 Mongo DB 或 Amazon Dynamo DB)