哪个关系模型更适合这个例子?

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

【讨论】:

以上是关于哪个关系模型更适合这个例子?的主要内容,如果未能解决你的问题,请参考以下文章

ThinkPHP5中模型的一对一关联关系

Django - 按模型名称获取 ContentType 模型(通用关系)

Laravel 动态关系 - 在急切加载时访问模型属性

类图怎么画

如何将现有的关系数据库模型转换为适合无 sql 数据库的模型(如 Mongo DB 或 Amazon Dynamo DB)

模型和数组有啥关系?情况很复杂