首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从统一建模语言到查询语言(PostgreSQL)

从统一建模语言到查询语言(PostgreSQL)
EN

Stack Overflow用户
提问于 2018-06-06 23:58:12
回答 1查看 795关注 0票数 1

我正在为即将到来的考试进行训练,刚刚完成了这个(简单的)练习。

我只想确保我正确地实现了所有内容,特别是重数为1和0的组合。*

我的答案是:

代码语言:javascript
复制
CREATE TABLE exam.A(
    idA integer,
    b text NOT NULL,
    c float DEFAULT -1.0 CONSTRAINT negative_c CHECK (c < 0.0),
    PRIMARY KEY(idA));

CREATE TABLE exam.B(
    idB integer,
    c integer,
    PRIMARY KEY(idB));

CREATE TABLE exam.RelationAandB(
    idA integer NOT NULL ON DELETE CASCADE,
    idB integer,
    b integer,
    c text,
    FOREIGN KEY (idA) REFERENCES exam.A(idA),
    FOREIGN KEY (idB) REFERENCES exam.B(idB),
    PRIMARY KEY (idA, idB));
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-07 15:00:03

您的SQL代码非常好,但我看到了以下问题:

  1. 在UML类图中,属性在默认情况下是必需的。只有在用重数表达式0..1限定时,它们才是可选的。因此,所有属性都需要编码为非空列。单列外键declarations.
  2. Many也是如此,人们认为组合意味着删除依赖,尽管这不是Aggregation versus Composition语义所保证的,也不是基于常识(参见下面的注释)。这样的强制复合约束意味着,当它们的复合被删除时,组件或者也必须被删除,或者它们必须被重新分配给另一个(A)复合。如果您的讲师的意图是应该有一个删除依赖项,那么您最好在exam.B中使用级联删除规则idB integer FOREIGN KEY REFERENCES exam.RelationAandB CASCADE DELETE,

从idB到RelationAandB添加相应的外键声明

关于组合是否意味着组合及其组件之间的生命周期依赖的问题,我们必须区分三个抽象级别: 1)纯概念(哲学)级别,这应该是数据建模师的常识;2) UML语义,通常没有精确定义;3)代码级别(例如SQL)。在概念层面上,应该清楚的是,存在具有和不具有这种生命周期依赖关系的组合,因此存在组合本身并不意味着存在生命周期依赖关系。

不幸的是,UML没有定义如何声明一个组合具有存在依赖的组件的任何方法。在我的SO answer Aggregation versus Composition中,我建议对这样的组合使用“不可分”的构造型。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50724759

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档