問題タブ [referential-integrity]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
database - 参照整合性のための単一列/主キーのみのテーブル?
多分私はこれについて間違っているかもしれませんが、私のプロジェクトの 1 つのデータベース設計に取り組んでいます。
ユーザーにとって便利なカテゴリにエンティティをグループ化する分類列を持つエンティティがあります。これらの分類は事前定義されており、ユーザーが変更することはできません (少なくとも現在の設計ではそうです)。
Entity:Classification -> EntityClassification:Id.
EntityClassification に名前/説明列を含める予定はありません。現在の考えでは、これらの事前定義された名前のローカライズをサポートする必要があると考えています。これは、クライアントにダウンロードされたリソース ファイルのような静的文字列テーブルで行われます。国/言語。私が望むこの EntityClassfication に関連付けられている他のデータは実際にはなく、テーブルはやり過ぎのように見えますか?
これは、このタイプの問題に対して一般的/推奨される方法ですか? 私たちはSQL Server 2008を使用しており、データベースの列挙型データ型を持っていません。これは、私が実際に達成しようとしているようです。
mysql - 参照整合性の破れをチェックする
私のプロセスでは、次のようなことを行います。
ここで、このインポート後のデータが参照整合性を壊していないことを確認する必要があります。私は次のようなことをしたいと思います
同様のコマンドはありますか?そうでない場合、この制御を行う方法は?
環境: MySQL v5.1.xx と InnoDB
ありがとう
mysql - データベースにないデータを見つける
2 つのテーブル (存在する場合はテーブル内の ID、存在しない場合は NULL または空) を簡単に確認できるようにする、巧妙な MySQL スニペットを見つけ出す必要があります。
ユーザーテーブルとレガシーテーブルがあり、手動比較以外では、それらを一緒にテーブルに表示して比較できるようにする方法がわかりません。私が見たいのは、次のようなものです。
NULL または空の値を含める方法があることは知っていますが、それが何であるかはわかりません。これまでの私の混乱したSQLクエリは次のとおりです。はい、サブセレクト内でサブセレクトを行うのは恐ろしいことです。
ここには 3 つのテーブルが含まれますlegacy_users => migrate_map_users => users
。中間は、2 つを結合する単なる m2m です。legacy_users と users の両方に email 列があります。および ID の独自のバージョン。
皆さん、ありがとうございました!
database - RDBMS またはアプリケーションでデータベースの参照整合性を処理する必要がありますか?
外部キー、制約、デフォルト値などの項目は、データベース管理システム (この場合は MS Sql 2005) またはアプリケーションで処理する必要がありますか? 双方から意見を聞いたが、正直どちらに進むべきか迷っている。
私はもともとそれをデータベースに組み込むつもりでしたが、現在のデータベース設計ではこれが常に可能であるとは限りません。たとえば、一部のテーブルには循環参照が含まれており、 を使用してリンクすることはできませんON UPDATE CASCADE
。私が遭遇している別の問題は、複数のデータベース/サーバーを使用する可能性があり、リンクされたサーバー間で外部キー制約が機能しない可能性があることです。
私は何人かの開発者に、アプリケーション層でデータ検証を行い、データベースはデータを保存する場所のままにしておくことを勧めました。私はこの考えが好きですが、多くの場所で、データベースに参照整合性を構築して、アプリケーション層を通過しないトランザクションを許可する方が良いと読んだことがあります。これには同意しますが、終了時にはすべてのデータベース トランザクションがアプリケーションを通過するはずです。後でアドインを作成することにした場合でも、ObjectModel フレームワークを使用しているため、挿入/更新/削除クエリを書き直す必要はありません。
私の質問は、この状況でも、参照整合性をデータベースに組み込むことをお勧めしますか、それとも代わりにアプリケーション層に組み込むことは問題ありませんか? なぜ?
sql-server - リレーショナル データ ウェアハウスにおける参照整合性。その価値はありますか?代替手段は何ですか?
SQL Server 2008 を使用して聖書のような割合のリレーショナル データ ウェアハウスを構築する必要がある場合、外部キーを使用してデータの整合性を確保しますか?それとも他の手段を使用しますか?
私が外部キーを気に入っている理由は、一度だけ正しく取得する必要があり、完全性を保護するために常にそこにあるからです。無効化、ロード、有効化のルートを考えていました。
何かご意見は?
前もって感謝します。
sql-server - null 許容列を持つ複合外部キー
次の表で、PreviousID が常に ParentID が一致する行の ID を参照するようにする方法はありますか? または、ParentID が null の場合、参照された行でも null になりますか?
例:
これを強制する方法はありますか?
UPDATE :不思議に思っている人のために、複合外部キーは次の理由でこれを強制しません ( MSDNからコピー):
FOREIGN KEY 制約には null 値を含めることができます。ただし、複合 FOREIGN KEY 制約のいずれかの列に NULL 値が含まれている場合、FOREIGN KEY 制約を構成するすべての値の検証はスキップされます。複合 FOREIGN KEY 制約のすべての値が検証されるようにするには、関係するすべての列で NOT NULL を指定します。
UPDATE : 表現されているデータ構造を視覚化するのに役立つ場合は、同じ親を持つノードがリンクされたリストを構成する B ツリーです。リンクされたリスト内の各「前の」ポインターが同じ親を持つ別のノードを指すように強制しようとしています。親が null の場合は、親も null である別のノードを指す必要があります。
mysql - MySQL では、参照整合性を維持しながら単一のテーブルから複数のテーブルをロードするにはどうすればよいですか?
更新:「foreign_key_checks を 1 に設定しても、既存のテーブル データのスキャンはトリガーされません。したがって、foreign_key_checks = 0 のときにテーブルに追加された行は、一貫性が検証されません。」ソース: 5.1.4. サーバーシステム変数 -- foreign_key_checks --その結果、foreign_key_checks をオフにすることはオプションではないようです...
ファイル/テーブルで定義された関係を維持しながら、100,000 以上のレコードを含む単一のファイルから MySQL の複数のテーブルにデータをロードする必要があります。関係がすでに一致していることを意味します。このソリューションは、MySQL の最新バージョンで動作し、InnoDB または MyISAM エンジンのいずれかを使用できます。
私はこれらすべてにまったく慣れておらず、ID の自動生成と外部キー関係の確立の経験がほとんどありません。任意のポインタをいただければ幸いです。
上記の UPDATE の注記を参照してください: ライブ データベースで更新を行う必要はないことを付け加えるかもしれません。つまり、外部キー制約を無効にしてから挿入を実行し、制約を再度有効にしても問題ありません。データベースの参照整合性に問題がある場合、操作が失敗することを理解しているためです。
すべてのアプローチには、挿入が失敗した場合、または参照整合性の維持に失敗した場合の検証とロールバック/クリーンアップ戦略のいくつかを含める必要があります。
繰り返しますが、これはまったく新しいことであり、質問や明確化の要求がある場合は、できるだけ多くの情報を提供するために最善を尽くしています.
ありがとう!
SAMPLE DATA:例をより詳しく説明するために、従業員名、過去に使用したオフィス、およびタブで区切られた役職履歴を含むファイルを読み込もうとしていると仮定します。
ファイル:
注:単一のテーブル データベースは完全に正規化されています (単一のテーブルと同じように)。たとえば、"John Smith" の場合、John Smith は 1 つだけです。つまり、参照整合性の競合につながる重複はありません。
MyOffice
データベース スキーマには次のテーブルがあります。
MySQL を使用して、従業員、オフィス、および役職の ID を自動生成し、従業員とオフィス、および従業員と役職の間の関係を維持するスキーマにファイルをロードするにはどうすればよいですか?
だからこの場合。テーブルは次のようになります。
mysql - 参照整合性制約のある最初のデータベース-提案、フィードバック、エラー?
TARGET_RDBMS: MySQL-5.X-InnoDB( "X"は現在の安定版リリースと同じです)
背景:フィードバックを得るために、真の参照整合性制約を使用して最初のデータベースを構築し、「実際の」DDLを作成した後、データベースの「感触」をカバーすると信じる抽象化を行いました。これは、約20の3つのテーブルのみであり、すべて参照整合性制約があります。欠落しているのは複合キーテーブルだけです。このテーブルには、現時点でダンプするデータがないため、最初の反復に焦点を合わせています。
サンプルデータ/単体テスト:私が知らないことの1つは、モデル化された参照整合性を100%カバーするサンプルデータセットを構築する方法です。そして、そのサンプルデータとこのDDLを中心に「単体テスト」を構築します。
サンプルDLL:
(注:明確にするために、LEGENDと命名基準は、この例にすぎません。これは、「実際の」データベースから抽出したものです。列名は、本質的にロボットであり、特定の名前の意味と関係を作成することを目的としています。インスタンスをできるだけ明確にします。使用されている表記システムについて提案がある場合は、コメントしてください。提案を受け付けています。ありがとうございます。)
質問:
このデータベース構築を行うための欠落した、間違った、または「より良い」方法に関するあらゆるフィードバックを歓迎します。ご不明な点がございましたら、コメントしてください。できるだけ早く回答いたします。もう一度、ありがとう〜!
更新(1):
PKに「MEDIUMINTNOTNULLAUTO_INCREMENT」を追加したばかりですが、どうやってそれをやめたのかわかりません。
mysql - MySQLでは、FKで「CONSTRAINT」は何をしますか?
私はMySQL5.1のドキュメントを見ましたが、それでもこれを理解することはできません。MySQLに入力したコードとシステムによって出力されたコードの違いに気づいたのです。
コードサンプル01と02の違いは何ですか?つまり、02はCONSTRAINT
以前に追加されFOREIGN KEY
ています-なぜ、そしてそれは何をするのですか?
CODE_SAMPLE_01:
コンテクスト:
CODE_SAMPLE_02:
コンテクスト:
sql - これはどういう意味ですか -> 「テーブルを定義し、かつ参照整合性を維持する SQL ステートメントを指定しますか?」
SQL 試験の前に過去の論文をいくつか見ていて、この宝石に出くわしました。混乱しているので、ここで何が求められているのか説明してください。何が求められているのか、「テーブルを定義するSQL文を指定してください」とはどういう意味なのか、よくわかりません。
私は参照整合性を理解していると思います。値が 1 つのテーブルに格納され、別のテーブルで参照される場合、それらは同じでなければならないことを意味します。
それはこの質問にどのように当てはまりますか?
どうもありがとう :)