2016-05-20 10 views
0

AndroidのSQLiteデータベースの「外部キー」の正しい使い方と実装については混乱しています。外部キーAndroid DATABASE

私は次のように、いくつかの関係でDBを作成しました:あなたが見ることができるように、そこに3つのテーブルがあり、「食」の_idは、テーブル「カテゴリ」を接続する外部キーである

CREATE TABLE "food" (
`_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
`name` TEXT NOT NULL, 
`description` TEXT, 
`category_id` INTEGER, 
FOREIGN KEY(`category_id`) REFERENCES food(_id)) 

CREATE TABLE `category` (
`_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
`cagory_name` TEXT NOT NULL) 

CREATE TABLE "favourites" (
`_id` INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE, 
`id_favourite` INTEGER NOT NULL, 
FOREIGN KEY(`id_favourite`) REFERENCES food (_id)) 

と "お気に入り "です。

今、Androidでは、テーブル間にこのような関係があることを証明する何も起こりません。それを有効にするためにいくつかの宣言が欠けていますか? Androidでどのように動作しますか?

答えて

0

category_id外部キー参照が奇妙に見えます。

FOREIGN KEY(`category_id`) REFERENCES food(_id) 

なく

FOREIGN KEY(`category_id`) REFERENCES category(_id) 

は、ドキュメントのhttp://www.sqlite.org/foreignkeys.htmlを参照してくださいSQLiteの実行

PRAGMA foreign_keys = ON; 

に、必ず外部キー制約が適用されていることを確認するには、次の それはだ理由があります。

+0

はい、間違いありません。しかし、離れて、私はまだAndroidの外的なキーの明確な使用を参照してくださいしていない – Alex

+0

ああ私は、あなたが制約をテストしていると、それらのテストに失敗している参照してください?それとも、必要性が見えませんか? – mattdeak

+0

私はそれをテストしています。私はFOREIGN KEY属性を追加しても何の違いも見られません。したがって、私はAndroid Studioで実装するコードをいくつか見逃していると思います... 例:存在しておらず、アプリは問題なく動作しています... – Alex