これまでにいくつかのプロジェクトを見てきましたが、外部キーを使用しない (テーブルがリンクされていない) プロジェクトがある一方で、テーブルが実際にリンクされているプロジェクトがあることに気付きました。
iOS
を使用するアプリケーションを開発していますがSQLITE3
、アプリケーションを開発する際のベスト プラクティスはどれですか?
これまでにいくつかのプロジェクトを見てきましたが、外部キーを使用しない (テーブルがリンクされていない) プロジェクトがある一方で、テーブルが実際にリンクされているプロジェクトがあることに気付きました。
iOS
を使用するアプリケーションを開発していますがSQLITE3
、アプリケーションを開発する際のベスト プラクティスはどれですか?
ベスト プラクティスは、外部キーを持つことです。個人的には、リレーショナル データベースに外部キーがないという考えは、私にはなじみがありません。(しゃれを許してください)外部キーは、参照整合性を強化するのに役立ちます。
あなたは iOS 用のアプリを開発しているので、あなたの場合、オブジェクト モデルの設計とデータベース (テーブル) の設計はうまくいきます (データ プラミング コードは非常に簡単になります。それ以外の場合は、変更を加えるたびにデータ プラミング コードを微調整する必要があります)。あなたのアプリケーションで)。そうは言っても、オブジェクトに親子関係がある場合 (1 対 1 または 1 対多のマッピング) は、外部キー テーブル内に格納する必要があります。「親」オブジェクトはプライマリ テーブルに移動します。「子」オブジェクトは外部キー テーブルに入ります。
要件が非常に単純な場合は、情報を XML として保存することも検討できます。そうすれば、DB スキーマの設計について心配する必要はありません。あなたの検討のための1つの便利なリンク
FK を持つことは、マネージ メモリを持つことに少し似ています。アプリケーションの実装でどれほど重大なエラーが発生したとしても、システム自体が「ダングリング ポインター」を作成することは決してありません。
外部キーは、データの整合性を維持するために不可欠です。彼らです:
正直なところ、SQLite などの組み込みデータベースでは、複数のクライアント アプリケーションが定期的に同じデータベースにアクセスする「大規模な」クライアント サーバー データベースほど重要ではありません。ただし、組み込み環境で FK を使用することにもマイナス面はないため、歴史的な理由による制限があまりない場合はいつでも使用する必要があります。
遠い昔、アプリケーションは、データベースの一部として外部キーを持たない階層データベースまたはネットワーク データベース上に構築されていました。外部キーは、アプリケーションでコーディングする必要がありました。
これらのアプリケーションは、多くの非難と悲鳴を上げた後、最終的にリレーショナル データベースに移行されました。2011 年に IDMS から DB2 に移行されたアプリケーションの保守を手伝っています。
コードは変更されず、開発者はアプリケーションの一部として外部キーを維持し続けました。
Railsフレームワークがデータベース上でもこれらの関係を作成していないように見えるのはなぜだろうか。彼は Active Record を使用してこれらの関係を作成します。