こんばんは!
私は次のUMLクラス図から(残念ながらフランス語で)最初の実際のデータベースの設計に取り組んでいます。
私はこの方法で作成したリレーショナルスケッチを作成する段階にあります。
それでも、データベースに質問しようとすると、製品番号1を注文したことがないクライアントであるという問題が発生します。
実際、Client、CommandeとProduitの間に関係がないと思われる限り、SQLでそれを行う方法はわかりません。 。次の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)
);
リレーショナル代数と微積分では、次のようになります。
リレーショナル計算では説明できないので、間違いを犯したと思います。
私はあなたが提供したすべてのリンクを読み、それゆえ私のテーブルにいくつかのコメントと変更を追加しました、私が私の仮定に正しいかどうか教えていただけますか?
しかし、最後のものは同じ主キーを持っています。それは問題ですか?
UMLclassダイアグラムでは、クラスの属性リストにリレーションが含まれていないため、これらのクラスを表すデータベーステーブルを作成するとき、データベース設計者はそれらを識別して指定する必要があります。ソフトウェア開発者が関連オブジェクトをサポートするためにポインタとリストを作成する必要があるのと同じように。
図では、Commande
はClient
に関連していますが、IDClient
属性を明示的に指定していません。 Commande
テーブルを作成するときは、Client
への外部キーとともにこの属性を含める必要があります。
この詳細については、 データベース設計-UML/SQL を参照してください。
OrderクラスのUML表現には、独自の説明属性のみが含まれています。 UMLの関連付けは、どの顧客が注文したかを示します。データベースでは、顧客を識別する別の方法が必要です。これは、関係スキーム(以下)の一部になります。
Ziggyの回答に加えて、この図を機能させるには、それを編集する必要があります。たとえば、cleint_order
という3番目のテーブルを作成すると、このテーブルにはClient
テーブルの主キーがあり、 idproduct
from product
テーブル1つのクライアントに1つ以上の製品があり、1つの製品を多くの顧客に注文できるため。