SQLite和CoreData資料庫的比較,sqlitecoredata
1. SQLite資料庫
sqlite資料庫操作的基本流程是, 建立資料庫, 再通過定義一些欄位來定義表格結構, 可以利用sql語句向表格中插入記錄, 刪除記錄, 修改記錄, 表格之間也可以建立聯絡。
這些操作都需要使用SQL語句去實現,感覺操作很直接。如果先前有一點資料庫和SQL基礎的話,寫起來會感覺很親切,都是一些資料庫操作的語句。但是當操作變多之後,語句越來越多,就很煩,代碼比較多,看起來也會混亂一些。
- 如果想要詳細瞭解,可以看iOS學習36資料處理之SQLite資料庫
2. CoreData資料庫
一對多時:設定為 properties 項選中 Optional, Plural 選項 To-Many Relationship 選中;
多對一反向關係時:properties 項選中 Optional, Count 項選中Minimun 和 Maximun 並分別設定其值為1;
如果想要詳細瞭解,可以看iOS學習37資料處理之CoreData
3. 比較
1> CoreData的類與SQLite資料庫中的文字描述做一個對應:
NSEntityDescription --> 表格結構
NSManagedObjectModel --> 資料庫中所有表格和他們的聯絡
NSPersistentStoreCoordinator --> 資料庫存放方式
NSManagedObjectContext --> 資料庫操作
NSFetchRequest --> 查詢語句
NSManagedObject --> 表格的記錄
2> 下面我們可以詳細的看看CoreData的類
NSEntityDescription 用來定義表格結構, 所以你就可以理解 NSManagedObjectModel 中的 setEntities:(NSArray *)entities 函數大概有什麼用了 . 通常, 定義 model , 是用檔案 CoreData.xcda*****odel , 可以圖形化的操作. 這類似用nib來建立介面.
這個類的對象通常用 NSManagedObjectModel 的對象來初始化, 這個類抽象出不同的存放方式, 最經常用的是 NSSQLiteStoreType.
這個類的對象又用 NSPersistentStoreCoordinator 的對象來初始化, 它裡面有些方法來添加, 刪除 NSManagedObject
通常用 NSEntityDescription 來構造查詢, 也就指定查詢那個表格, 另外可以指定排序.
- NSFetchedResultsController
NSFetchedResultsController 只是又封了一下, 和 NSFetchRequest 合起來使用, 方便取資料, 另外和 NSManagedObjectContext 關聯, 當資料庫發生變化的時候收到通知.
3> 特點比較
CoreData的強大之處就在於這種關係可以在一個對象更新時,其關聯的對象也會隨著更新,相當於你更新一張表的時候,其關聯的其他表也會隨著更新。
Core Data的另外一個特點就是提供了更簡單的效能管理機制,例如,使用NSFetchedResultsController類,你不用使用SQL的Limit而是使用NSFetchRequest類的setFetchBatchSize()就可以限制查詢記錄的總數,而NSFetchedResultsController類神奇的地方在於需要擷取更多記錄的時候,這個類會自動更新其緩衝。
對於多表查詢上相對來說,CoreData 沒有 SQL 直觀,但 CoreData 的功能還是可以完成相關操作的,但是對於類似外串連,左串連等操作,在CoreData中就顯得無力。