晚上好!
我正在根据以下 UML 类图(不幸的是法语)设计我的第一个实际数据库:
我正在创建我以这种方式创建的关系草图:
然而,当试图向数据库询问哪些客户从未订购过第一号产品时,它会产生一些问题?
事实上,我不知道如何在 SQL 中做到这一点,因为Client、Commande和Produit之间似乎没有关系。它给出了以下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)
);
在关系代数和微积分中,它给出:
我无法在关系微积分中解释它的事实让我认为我犯了一个错误。
使用新表进行编辑
我阅读了您提供的所有链接,因此在我的表格上添加了一些评论和更改,您能告诉我我的假设是否正确吗?
但是最后一个具有相同的主键。这是个问题吗?
UML类图在类的属性列表中不包括关系,因此在创建表示这些类的数据库表时,数据库设计者必须识别和指定它们,就像软件开发人员必须创建指针和列表以支持相关对象一样。
在您的图表中,
Commande
与属性相关Client
但未明确指定。IDClient
创建Commande
表时,您必须包含此属性以及Client
.您可以在Database Design - UML/SQL中找到有关此的更多信息:
除了 Ziggy 的回答,如果你想让这个图表工作,你需要编辑它,例如你应该创建第三个表,这个表有来自table 和
cleint_order
table 的主键,因为一个客户可能有一个或多个产品一种产品可以从许多客户那里订购。Client
idproduct
product
有用的链接:https ://stackoverflow.com/questions/7296846/how-to-implement-one-to-one-one-to-many-and-many-to-many-relationships-while-de