Bạn có thể hiển thị cho chúng tôi lược đồ cơ sở dữ liệu của bạn không? Tôi đoán là bạn đã sử dụng sự thừa kế đối tượng trong nó một cách tự do.
Dữ liệu cốt lõi thực hiện kế thừa trong các cửa hàng SQL bằng cách tạo một bảng đơn cho thực thể cha và thêm cột cho liên kết của tất cả các trường được các thực thể con sử dụng. Vì vậy, bạn có thể nghĩ rằng bạn đã đổi tên chỉ hai trường trên một thực thể nhưng Dữ liệu cốt lõi phải áp dụng các thay đổi cho mọi đối tượng kế thừa từ thực thể đó hoặc có tổ tiên chung của thực thể đó.
Trong lược đồ cụ thể của bạn, có vẻ như bạn có một thực thể, Mục, từ đó ít nhất là Thể loại, AudioTrack, Studio, Giám đốc, Cửa hàng, Phim, Điều kiện, Khu vực, Chủ sở hữu, AspectRatio, Năm, MyRating, Tập, Ấn bản, Định dạng, nhà sản xuất, nhà văn, AudienceRating, SeenIt và Movie xuống. Có thể có những người khác khi tôi đọc nhật ký của bạn bằng mắt thay vì phân tích nó tự động. Vì vậy, Core Data tạo ra một bảng có tên Item, trong đó mỗi cá thể của mỗi một thực thể đó đều được lưu trữ. Bất cứ khi nào một trong những thực thể đó (hoặc những người khác mà tôi có thể không tìm thấy) thay đổi, Core Data phải cập nhật các bản ghi cho tất cả các cá thể của mỗi một thực thể đó.
Đó là lý do tại sao bạn thấy:
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)
Đó là bảng chứa sự kết hợp của tất cả các lĩnh vực của tất cả các hậu duệ của Item. Đó cũng là lý do tại sao ví dụ:tìm nạp cho AudienceRatings được thực hiện như sau:
SELECT t0.Z_ENT, t0.Z_PK, t0.Z_OPT, t0.ZSECTION ... FROM ZITEM t0 WHERE t0.Z_ENT = ?
Vì vậy:
- Lõi Dữ liệu được cập nhật nhiều hơn 50 hàng;
- nếu bạn muốn tránh điều này, bạn cần phải tránh thừa kế;
- bạn có thể tránh 'là' mối quan hệ với 'có' mối quan hệ nhưng bản chất hai chiều của dữ liệu lõi thường làm cho điều đó đau (nếu 30 đối tượng có kết nối đến mục thì mục phải có 30 kết nối với các đối tượng khác) ;
- nếu mục chỉ là thứ gì đó tầm thường như dấu thời gian thống nhất, việc thêm dấu thời gian vào mọi thực thể thường dễ dàng hơn và mỗi lần gọi một đoạn mã chung để thiết lập nó.
Xin chào, Có, tôi có một thực thể cha mẹ với nhiều trẻ em (http://cl.ly/image/3T3Z1N0M2v18), nhưng thực thể này chưa được sửa đổi. Tôi đã thực sự chỉ cần đổi tên 2 lĩnh vực của bảng Liên kết, nhưng các lĩnh vực này đã không được ánh xạ từ cũ sang mô hình mới (vì vậy tôi không cần phải reinsert bất kỳ dữ liệu!). Cơ sở dữ liệu chỉ nên giữ nguyên như vậy, vì các trường được đổi tên thuộc về một bảng trống. – aneuryzm
Trong kho dữ liệu lõi của SQL, nếu 'A' và' B' xuất phát từ 'X' thì có một bảng đơn có tên' X' trong đó các thể hiện của cả hai 'A' và' B' được lưu trữ. Vì vậy, nếu bạn cập nhật thực thể 'B' thì Core Data phải tái xử lý tất cả các trường hợp của cả hai' A' và 'B' bởi vì nó phải cập nhật bảng' X'. Trong trường hợp của bạn, sự nghi ngờ của tôi là số lượng các phiên bản được cập nhật kết thúc là đáng kể. – Tommy
Đây là câu trả lời đúng. Bạn có thể nghĩ rằng bảng trống, nhưng nó không phải là. Có iad thực sự chỉ có 1 bảng chứa tất cả mọi thứ (vì thừa kế thực thể của bạn). – Wain