私はデータベースを初めて使用するので、これが基本的な質問であれば許してください。
私は複雑なオープンソースディクショナリを解析し、データも同様に複雑なAccessデータベースに出力しようとしています。
テーブルにデータを挿入する方法は理解していますが、外部キーを相互に依存する複数のテーブルにデータを挿入する方法がわかりません。簡単な例を挙げましょう:
Entry
、Keyword
、Keyword_Priority
の3つのテーブルがあります。すべてのエントリは複数のキーワードを持つことができるので、Keyword
テーブルは外部キーを通じてEntry
にリンクします。また、各キーワード要素には、キーワードの優先度を説明する複数の要素を含めることができるため、以下のように、Keyword_Priority
テーブルは外部キーを介してKeyword
にリンクします。
この単純化されたシナリオで、SQLを使用して新しいエントリを作成するとします。どこから始めますか?私は:
最初にEntry
テーブルに挿入して、新しいEntryID
を作成します
次に、新しいKeyword
を外部キーとして使用してEntryID
テーブルに挿入します
次に、キーワードのID
フィールドを外部キーとして使用して、Keyword_Priority
テーブルに挿入します
または、別の方法で行う必要があります...
Keyword_Priority
テーブルに挿入
Keyword
テーブルに挿入
Entry
テーブルに挿入
要約すると、私の質問は:
一度に複数のテーブルにデータを挿入する場合、どこから始めればよいですか?トップダウンからですか、それともボトムアップからですか?
外部キーは、別のテーブルの主キーに関連しています。外部のレコードが入力されると、その主キーを持つ対応するレコードが存在する必要があります。したがって、常にリレーションの片側のテーブル(マスター、親、または主キーテーブル)に挿入することから始める必要があります。次に、リレーションのn側(詳細または子または外部キーテーブル)にレコードを入力できます。
順序:1.エントリ、2。キーワード、3。Keyword_Priority。
テーブルに複数の外部キーがある場合、他のすべてのテーブルの関連レコードと対応する主キーを最初に入力する必要があります。たとえば、SenseRestricted...
にレコードを入力する前に、Sense
およびReading
の対応するレコードを挿入しておく必要があります。
いくつかの一般的なアドバイス。画像では、Keyword_PriorityはEntryに依存するKeywordに依存していると思います。したがって、まずエントリから始め、次にキーワードなどにする必要があります。
モデリングの観点からは、モデルのどこで使用するかに関係なく、何かは何かです。エントリはかなりまともです:
CREATE TABLE entry
( EntryId ... NOT NULL PRIMARY KEY
, ...
);
キーワードの場合、次のようになります。
CREATE TABLE keyword
( KeywordId ... NOT NULL PRIMARY KEY
, ...
, EntryId ... REFERENCES entry (EntryId)
)
つまりIdは使用しないでください。あいまいすぎます。属性は、特に何かのIDです。また、項目EntryIdがエントリと同様に命名されていることに注意してください。
Ms-accessには制限があり(少なくとも以前はそのように使用されていました)、複合外部キーを防ぐことができるので、代理キーの問題については詳しく説明しません。