あなたのデータベーススキーマを教えていただけますか?私の推測では、あなたは自由にオブジェクト継承を使用しています。
コアデータは、親エンティティ用の単一のテーブルを作成し、子エンティティによって使用されるすべてのフィールドの結合用の列を追加することによって、SQLストア内の継承を実装します。したがって、1つのエンティティで2つのフィールドのみの名前を変更したと思うかもしれませんが、コアデータは、そのエンティティから継承する、またはそのエンティティの共通の祖先を持つすべてのオブジェクトに変更を適用する必要があります。
ジャンル、AudioTrack、スタジオ、ディレクター、ストア、ムービー、条件、地域、所有者、AspectRatio、年、MyRating、エピソード、エディション、フォーマット、プロデューサー、作家、AudienceRating、SeenIt、映画降下。自動的に分析するのではなく、あなたのログを目で見ているように他のものがあるかもしれません。したがって、Core Dataは、これらのエンティティのすべてのインスタンスが格納されるItemという1つのテーブルを作成します。これらのエンティティ(または見つからなかった可能性のあるもの)のいずれかが変更されると、コアデータはこれらのエンティティのすべてのインスタンスのレコードを更新する必要があります。
あなたが見る理由です:項目のすべての子孫のすべてのフィールドの組合を含むテーブルです
CREATE TABLE ZITEM (Z_PK INTEGER PRIMARY KEY, Z_ENT INTEGER, Z_OPT INTEGER,
ZUNIQUEID INTEGER, ZCOLLECTIONSTATUS INTEGER, ZHASCOVER INTEGER, ZINDEX INTEGER,
ZPLOTNOTE INTEGER, ZUSERVALUES INTEGER, ZPURCHASEDATEDAY INTEGER,
ZPURCHASEDATEMONTH INTEGER, ZPURCHASEDATEYEAR INTEGER, ZRELEASEDATEDAY INTEGER,
ZRELEASEDATEMONTH INTEGER, ZRUNTIME INTEGER, ZVIEWINGDATEDAY INTEGER,
ZVIEWINGDATEMONTH INTEGER, ZVIEWINGDATEYEAR INTEGER, ZAUDIENCERATING INTEGER,
ZCONDITION INTEGER, ZEDITION INTEGER, ZFORMAT INTEGER, ZLOANER INTEGER,
ZLOCATION INTEGER, ZMYRATING INTEGER, ZOWNER INTEGER, ZSEARCH INTEGER,
ZSEENIT INTEGER, ZSEENWHERE INTEGER, ZSERIES INTEGER, ZSTORAGEDEVICE INTEGER,
ZSTORE INTEGER, ZYEAR INTEGER, ZRANK INTEGER, ZTYPEID INTEGER,
ZCOLLECTIBLE INTEGER, Z3_COLLECTIBLE INTEGER, ZBIN INTEGER, ZSORTORDER INTEGER,
ZSECTION VARCHAR, ZCLZID VARCHAR, ZCONNECTHASH VARCHAR, ZSORTTITLE VARCHAR,
ZTITLE VARCHAR, ZACTORS VARCHAR, ZCLZMEDIAID VARCHAR, ZCURRENTVALUE VARCHAR,
ZIMDBNUMBER VARCHAR, ZIMDBRATING VARCHAR, ZLOANDATE VARCHAR, ZLOANDUEDATE VARCHAR,
ZPURCHASEPRICE VARCHAR, ZSTORAGESLOT VARCHAR, ZTITLEEXTENSION VARCHAR,
ZUPC VARCHAR, ZTHEDESCRIPTION VARCHAR, ZURL VARCHAR, ZDISPLAYNAME VARCHAR,
ZSORTNAME VARCHAR)
。それはまた、AudienceRatingsフェッチとして実行されます。
だから、
SELECT t0.Z_ENT, t0.Z_PK, t0.Z_OPT, t0.ZSECTION ... FROM ZITEM t0 WHERE t0.Z_ENT = ?
:
- Core Dataはたくさんに50の以上の行を更新しています。
- これを避けたい場合は、継承を避ける必要があります。
- 「関係はあります」との関係はありませんが、Core Dataの双方向性により、しばしば苦痛になります(30個のオブジェクトがItemに接続していれば、Itemは他のオブジェクトと30個の接続を持つ必要があります) ;
- Itemが均一なタイムスタンプのような単純なものであれば、通常はすべてのエンティティにタイムスタンププロパティを追加し、共通のコードを呼び出すだけで簡単に設定できます。
こんにちは、私は多くの子供(http://cl.ly/image/3T3Z1N0M2v18)で親エンティティを持っていますが、このエンティティは変更されていません。私は実際にテーブルのリンクの2つのフィールドの名前を変更しましたが、これらのフィールドは古いモデルから新しいモデルにマップされていません(したがって、データを再挿入する必要はありません)。名前を変更したフィールドは空のテーブルに属しているため、データベースはそのまま残す必要があります。 – aneuryzm
コアデータのSQLストアでは、 'A'と' B'が 'X'から始まっている場合、' A'と 'B'の両方のインスタンスが格納されている' X'という単一のテーブルがあります。したがって、エンティティ 'B'を更新すると、' X'テーブルを更新する必要があるため、コアデータは 'A'と' B'の両方のインスタンスをすべて再処理しなければなりません。あなたの場合、私の疑念は、更新されるインスタンスの数が重要なものになってしまうことです。 – Tommy
これは正解です。あなたはテーブルが空だと思うかもしれませんが、そうではありません。実際には、すべてのものを含むテーブルが1つしかありません(エンティティの継承のため)。 – Wain