web-dev-qa-db-ja.com

特定のUML図で指定されていないテーブル間の関係を作成する

こんばんは!

私は次のUMLクラス図から(残念ながらフランス語で)最初の実際のデータベースの設計に取り組んでいます。

UML description of the database

私はこの方法で作成したリレーショナルスケッチを作成する段階にあります。

RelationalScheme

それでも、データベースに質問しようとすると、製品番号1を注文したことがないクライアントであるという問題が発生します。

実際、ClientCommandeProduitの間に関係がないと思われる限り、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)
);

リレーショナル代数と微積分では、次のようになります。

Relational algebra and calculus

リレーショナル計算では説明できないので、間違いを犯したと思います。

新しいテーブルで編集する

私はあなたが提供したすべてのリンクを読み、それゆえ私のテーブルにいくつかのコメントと変更を追加しました、私が私の仮定に正しいかどうか教えていただけますか?

The new relational scheme

しかし、最後のものは同じ主キーを持っています。それは問題ですか?

UMLclassダイアグラムでは、クラスの属性リストにリレーションが含まれていないため、これらのクラスを表すデータベーステーブルを作成するとき、データベース設計者はそれらを識別して指定する必要があります。ソフトウェア開発者が関連オブジェクトをサポートするためにポインタとリストを作成する必要があるのと同じように。

図では、CommandeClientに関連していますが、IDClient属性を明示的に指定していません。 Commandeテーブルを作成するときは、Clientへの外部キーとともにこの属性を含める必要があります。

この詳細については、 データベース設計-UML/SQL を参照してください。

OrderクラスのUML表現には、独自の説明属性のみが含まれています。 UMLの関連付けは、どの顧客が注文したかを示します。データベースでは、顧客を識別する別の方法が必要です。これは、関係スキーム(以下)の一部になります。

Ziggyの回答に加えて、この図を機能させるには、それを編集する必要があります。たとえば、cleint_orderという3番目のテーブルを作成すると、このテーブルにはClientテーブルの主キーがあり、 idproduct from productテーブル1つのクライアントに1つ以上の製品があり、1つの製品を多くの顧客に注文できるため。

便利なリンク: https://stackoverflow.com/questions/7296846/how-to-implement-one-to-one-one-to-many-and-many-to-many-relationships-while-de

1
Ahmad Abuhasna