(前回)Cocoaの日々: CoreData - リレーションシップ(2) SQLiteのスキーマ
モデリングを見直し、逆関連(inverse)かつ対多関連を追加してみた。
それぞれの関連設定は次の通り。
すると今度はうまくいった。
何度実行してもきちんとタグが表示される。
[15414:10b] title=iPad 5/28発売
[15414:10b] *tag*: iPad
[15414:10b] title=CoreData のリレーションしっぷについて
[15414:10b] *tag*: iPad
[15414:10b] *tag*: iPhone
[15414:10b] *tag*: Mac
SQLite を見てみよう。
sqlite> .tables ZBLOGENTRY ZTAG Z_1TAGS Z_METADATA Z_PRIMARYKEY新しく Z_1TAGS テーブルが追加されているのが分かる。
sqlite> .schema z_1tags CREATE TABLE Z_1TAGS ( Z_1ENTRIES, Z_2TAGS ); CREATE INDEX Z_1TAGS_Z_1ENTRIES_INDEX ON Z_1TAGS (Z_1ENTRIES); CREATE INDEX Z_1TAGS_Z_2TAGS_INDEX ON Z_1TAGS (Z_2TAGS);
中身を見ると、いわゆる中間テーブルで ZBLOGENTRY と ZTAG へのリレーションを持っている。
データはこんな感じ。
sqlite> select * from z_1tags; 2|1 2|2 2|3 1|1
ZTAGはどうか。
sqlite> .schema ztag CREATE TABLE ZTAG ( Z_ENT INTEGER, Z_PK INTEGER PRIMARY KEY, Z_OPT INTEGER, ZNAME VARCHAR );
Z1TAG が無くなって、基本属性値だけになっている。
ER図はこんな感じ。
- - - -
なるほど。タグのような多対多関連はこんな感じでモデリングするのか。