在给定 UML 图中未指定的表之间创建关系

Rev*_*ica 5 postgresql database-design relational-theory relational-algebra relational-calculus

晚上好!

我正在从以下 UML 类图(不幸的是法语)设计我的第一个实际数据库:

数据库的UML描述

我正在创建它的关系草图,我是这样创建的:

关系图式

然而,当试图向数据库询问哪些客户从未订购过第一产品时,它会产生一些问题

确实,我不知道如何在 SQL 中做到这一点,因为ClientCommandeProduit之间似乎没有关系。它给出了以下sql代码:

CREATE TABLE Client (
IDClient INT NOT NULL,
AdresseClient VARCHAR(255)NOT NULL ,
NomContact VARCHAR(255)NOT NULL,
NumeroSIRET VARCHAR(14) NOT NULL,
CONSTRAINT cclient PRIMARY KEY (IDClient)
);

CREATE TABLE Produit (
IDProduit INT NOT NULL  ,
PrixVente INT NOT NULL ,
QuantiteEnStock INT NOT NULL ,
CONSTRAiNT cproduit PRIMARY KEY (IDProduit)
) ;

CREATE TABLE Commande (
IDNumeroCde INT NOT NULL  ,
Date DATE NOT NULL ,
CONSTRAINT ccommande PRIMARY KEY (IDNumeroCde)
);
Run Code Online (Sandbox Code Playgroud)

在关系代数和微积分中,它给出:

关系代数和微积分

我无法在关系演算中解释它这一事实让我认为我犯了一个错误。

使用新表进行编辑

我阅读了您提供的所有链接,因此在我的表格上添加了一些评论和更改,您能告诉我我的假设是否正确吗?

新的关系方案

但是最后一个具有相同的主键。这是个问题吗?

Eze*_*nay 1

UML图不包括类属性列表中的关系,因此在创建表示这些类的数据库表时,数据库设计者必须识别并指定它们,就像软件开发人员必须创建指针和列表来支持相关对象一样。

在您的图中,Commande涉及Client但未明确指定IDClient属性。创建Commande表时,必须包含此属性以及 的外键Client

您可以在数据库设计 - UML/SQL中找到有关此内容的更多信息:

Order 类的 UML 表示仅包含其自己的描述性属性。UML 关联告诉哪个客户下了订单。在数据库中,我们将需要一种不同的方式来识别客户;这将是关系方案的一部分(如下)。