Core Dataが生成するsqliteテーブルを見ていて、すべてのテーブル列が「Z」で始まることに気付きました。これは実装の詳細であることに気づきましたが、なぜそうなるのか、そしてこれに関係する設計上の決定があるのかどうかについて知りました。誰かが偶然知っているか、なぜだと思いますか?
Core Data sqliteデータベースのサンプルスキーマ出力を次に示します。
sqlite> .schema CREATE TABLE ZPOST(Z_PK INTEGER PRIMARY KEY、Z_ENT INTEGER、Z_OPT INTEGER、ZPOSTID INTEGER、ZUSER INTEGER、ZCREATEDAT TIMESTAMP、ZTEXT VARCHAR); CREATE TABLE ZUSER(Z_PK INTEGER PRIMARY KEY、Z_ENT INTEGER、Z_OPT INTEGER、ZUSERID INTEGER、ZAVATARIMAGEURLSTRING VARCHAR、ZUSERNAME VARCHAR); CREATE TABLE Z_METADATA(Z_VERSION INTEGER PRIMARY KEY、Z_UUID VARCHAR(255)、Z_PLIST BLOB); CREATE TABLE Z_PRIMARYKEY(Z_ENT INTEGER PRIMARY KEY、Z_NAME VARCHAR、Z_SUPER INTEGER、Z_MAX INTEGER);
この特定のケースの理由については本当にわかりませんが、共通の目的を果たすデータベーステーブルの前に特別なプレフィックスを付けて簡単に参照し、他のテーブル(ユーザーとzUserなど)の衝突を回避することは珍しくありません。
—
NoChance
おそらく、彼らが見つけやすいように。Appleは、Core DataテーブルをCore Data以外のもので編集してはならないことを明確にしています。コアデータテーブルを見ているときに簡単にわかるように、すべてのコアデータテーブルに珍しいプレフィックスを選択することは理にかなっています。
—
Caleb
多分それは元のSAPコンサルタントによって設計されたのでしょうか?
—
Philipp
@Philippにはポイントがあるかもしれませんが、最初の提案は笑いました。SAPでは、Zをカスタムテーブルに追加して、SAP内部テーブルと競合しないようにします。同じことがここで起こっている可能性があります。CoreDataは、エンティティ用に作成されたテーブルの前にZを追加して、その内部のものとテーブルが衝突しないようにします。
—
jmstone
私のローカル開発データベースでは、テストテーブルの先頭にZを付けて、リストの一番下にアルファベット順に並べます。それらを一緒に見やすくし、終了時に削除しやすくします。
—
mike30