2011-09-27 43 views
0

私はsqliteの下で外部キーなしでテーブルを作成する方法を理解しようとしています。私は今、私が働いているいくつかのアプリケーションの下で、その非互換性のために外部キーの使用を避けたいと思います。SQLite、外部キーなしの関連付けをエンティティする方法は?

誰でも2つのテーブルを使用して簡単な例を表示できますか?ありがとうございました。

簡単な例:特定のアーティストからすべてのトラックを選択するにはどうすればよいですか?

CREATE TABLE artist(
    artistid INTEGER PRIMARY KEY, 
    artistname TEXT 
); 

CREATE TABLE track(
    trackid  INTEGER, 
    trackname TEXT, 
    trackartist INTEGER 
); 

答えて

1

外部キーを指定しない場合、外部キーはありません。

+0

はい、ただし、テーブルエンティティ間の関連付けを行う方法はありますか? (SELECT 1 FROM artist where artistid = trackartist) – devjs11

+0

@Alex:外部キーは制約のみです。制約がないということは、クエリを変更する必要があるという意味ではありません。 – Benoit

+0

私は自分の投稿を更新しました。外部キーを使用せずに特定のアーティストからすべてのトラックを選択するには、どのようなクエリを行う必要がありますか? – devjs11

1

外部キーを宣言することなくテーブル間の関係を設定できます。あなたは、単に

SELECT a.*, t.* FROM artist a INNER JOIN track t ON a.artistid = t.trackartist; 

(あなたがa.*, t.*の代わりにしたい実際の列を代入)を行います。

trackartistがアーティスト(artistid)の外部キーであることを宣言することなく、これを行うことができます。その宣言をする場合、違いは、有効なアーティストIDではなく、トラックアーチストで使用されているアーティストIDを決して変更または削除しないことを、貴方がトラックアーチストに絶対に入れないことを保証することです。

外部キーは、テーブル間の関連付けの整合性を維持するメカニズムですが、データベースに宣言されているプラ​​イマリキーまたは外部キーとは関係なく、SELECTステートメントで必要な関連付けを「作成」できます。

関連する問題