-2

これらの 4 つのテーブルの優れた設計を提案できる人はいますか。

デザイン

 Fields: DesignId (Primarykey),
Iname..,....

表 2 :入力ファイル

FileId int,
DesignId ,
FileName,
Description,
primary key (FileId,DesignId )
foreign key(DesignId)...
//This foreign key here seems to cause insert problems.

表3 : 入力データ

DesignId int,
TestCaseInputId,
FileId int,
MaterialType,
primary key(DesignId ,TestCaseInputId,FileId)
foreign key(FileId ) references InputFiles
foreign key(DesignId) refernces Design

質問:

  1. 表 2、表 3 の複合キーについては確信が持てません。
  2. 外部キー。外部キーが挿入の問題を引き起こしているようです
4

2 に答える 2

1

使用シナリオに関するわずかな知識から実際に設計を行うことはできません...しかし

いくつかの疑似 DDL、使用しているサーバーがわからない...

create table Design (
    DesignID int not null primary key,
    Iname nvarchar(32) not null
)

create table InputFile (
    FileID int not null primary key,
    DesignID int not null, -- foreign key referencing Design (DesignID)
    FileName nvarchar(max) not null,
    Description nvarchar(max) null
)

create table InputData (
    TestCaseInputID int not null primary key,
    FileID int not null,  -- Foreign key referencing InputFile (FileID)
    MaterialType nvarchar(?)
)

要点は、同じ FileID を持つ複数のファイルを作成するつもりでない限り、InputFile の主キー (FileID、DesignID) を作成しないことです。

InputData に DesignID を含める必要はなく、冗長です。そこに配置する場合は、InputFile.DesignID との一貫性を維持する必要があります。この関係が変わらない場合でも、それが必要になる場合があります。それは正常化のヒントにすぎません。

次の順序でデータを挿入する必要があります...

  1. 最初のインサートのデザイン
  2. 次に、ファイルを挿入します
  3. 次に、InputData を挿入します

InputData が InputFile とは別のテーブルであるのはなぜですか? ファイルごとに複数の入力データ行を作成する場合、それは理にかなっています。

DesignID、FileID、および TestCaseInputID ID 列、またはサーバーの同等の自動インクリメント int ID を作成することができます。または、これらの ID が別の場所で取得された実際の情報である場合は、それらを挿入する必要があります。

于 2012-05-05T17:45:57.760 に答える
1

「外部キーが [sic] 挿入の問題を引き起こしているようです」と言っても役に立ちません。何が問題ですか?問題は、外部キー制約ではなく、データをロードする順序であると推測します。データをロードする前に、ID が存在することを確認する必要があります。

ファイルからデータを読み取るときは、通常、次の戦略を使用します。

  1. 一時的なすべて文字のステージング テーブルにデータをロードします。
  2. 外部キーや型など、ステージング テーブルのデータを検証します。
  3. 必要に応じて、欠落している主キーを適切なテーブルに追加します。
  4. 最終テーブルにデータをロードします。

これには、より多くの手順とデータ移動が必要です。ただし、入力データを適切にチェックすることで、どれだけのリアルタイム時間を節約できるかを常に思い知らされます。

于 2012-05-05T17:28:38.360 に答える