0

私はデータベースに挿入する必要があるこのオブジェクトを持っています(正しい関係を含みます)私は正しいフィールドと関係でデータベーステーブルを構築するための最良の方法を見つけようとします。

私の目的:

objectA:

String id;
String mode;
String name;
Dictionary dict<String code,List<Pair<String index,String val>>

objectB:

String sysId;
List<objectA> objectAs;
String seates;

これは、objectB.sysIdとobjectA.id(多くのobjectAから1つのobjectB)の間の1対多の関係である必要が
あり、objectBではsysIdが主キーです。今objectAについて私は辞書を正しく処理する方法がわかりません...

前もって感謝します。

4

1 に答える 1

0
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持つことができますが、それは必須ではありません。示されている複合キーを使用すると、必ずしも他のテーブルを参照しなくても作業できます。自動的に割り当てられた値を使用すると、結合を強制される場合があります。IdObjectAObjectA_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これはあなたのスキーマがどのように見えるべきかと私が思うものです。私はあなたがそれがどのように見えるべきかをあなたが思うものを示すべきだったと思います。それはあなたの質問を改善したでしょう。

于 2012-12-21T02:55:58.083 に答える