CREATE TABLE ObjectA
(
Id CHAR(10) NOT NULL PRIMARY KEY,
Mode CHAR(10) NOT NULL,
Name CHAR(20) NOT NULL
);
CREATE TABLE ObjectA_Dict
(
Id CHAR(10) NOT NULL REFERENCES ObjectA,
Code CHAR(10) NOT NULL,
PRIMARY KEY(Id, Code)
);
CREATE TABLE ObjectA_DictEntry
(
Id CHAR(10) NOT NULL,
Code CHAR(10) NOT NULL,
FOREIGN KEY(Id, Code) REFERENCES ObjectA_Dict,
Index CHAR(10) NOT NULL,
Value VARCHAR(255) NOT NULL,
PRIMARY KEY(Id, Code, Index)
);
オブジェクトを識別するために使用される文字列の構成については何も教えていないので、それらをどれだけ大きくするかを知るのは難しいです。必要に応じて、テーブルで自動的に割り当てられたある種の整数値を使用することを決定できます。これにより、クエリの記述方法が変わりますが、ORM(Object-Relational Mapping)を処理するいくつかのツールでうまく機能する可能性があります。対象とするDBMSを特定していないため、それも図解しないでおく必要がありました。では、外部キー参照としてObjectA_DictEntry
持つことができますが、それは必須ではありません。示されている複合キーを使用すると、必ずしも他のテーブルを参照しなくても作業できます。自動的に割り当てられた値を使用すると、結合を強制される場合があります。Id
ObjectA
ObjectA_DictEntry
CREATE TABLE ObjectB
(
SysId CHAR(10) NOT NULL PRIMARY KEY,
Seates CHAR(20) NOT NULL
);
CREATE TABLE ObjectB_List
(
SysId CHAR(10) NOT NULL REFERENCES ObjectB,
Id CHAR(10) NOT NULL REFERENCES ObjectA,
PRIMARY KEY (SysId, Id)
);
ObjectB
これはあなたのスキーマがどのように見えるべきかと私が思うものです。私はあなたがそれがどのように見えるべきかをあなたが思うものを示すべきだったと思います。それはあなたの質問を改善したでしょう。