問題タブ [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.

0 投票する
4 に答える
2997 参照

sql - Oracle: 複数の親テーブルで PK を参照する FK

Oracle 10g では、外部キーの参照整合性制約を定義して、複数の親テーブルの主キーを参照することは可能ですか。

例えば:

DEPT_AMER

DEPT_ID
10
11
12

DEPT_APAC

DEPT_ID
13
14
15

DEPT_EMEA

DEPT_ID
16
17
18

EMP

EMP_ID DEPT_ID
500 11
501 15

EMP.DEPT_ID で DEPT_AMER、DEPT_APAC、DEPT_AMER のいずれかの部門 ID を参照できるようにします。このニーズを満たすために参照整合性を定義する方法はありますか。3 つのテーブルすべての DEPT_ID は、共通のシーケンスから生成され、一意であることが保証されています。

参照整合性の制約が不可能な場合、このデータの整合性を維持するためのより良い方法はありますか?

0 投票する
3 に答える
4155 参照

sql - Oracle テーブルを 1 行に制限する単純な制約

アプリケーション構成テーブルを 1 行に制限する簡単な方法を探しています。サブクエリを含む仮想列、または上にマテリアライズドビューを使用してこれを実行できることはわかっていますが、実際には単純なテーブルであり、テーブルを作成するよりも実装に多くの行を必要としない制約が必要です。

私が考えた最も簡単な方法は、ID フィールドを 1 に設定し、ID が 1 でなければならないというチェック制約です。 UNIQUE_FIELD = MAX(UNIQUE_FIELD) のチェック制約のように、これは許可されていません。

0 投票する
1 に答える
576 参照

nhibernate - NHibernate と組み合わせた SQLite は、参照整合性/外部キーをサポートしていますか?

私は SQLite を使用した NHibernate について少し読んでいて、軽量のデータベース処理が必要な場合に非常に良いオプションであると考えています。

NHibernate はALTER TABLEを介して外部キーを作成するため、データベースの作成中に NHibernate SQLite ダイアレクトが外部キーをサポートしない方法について説明している次の (およびリンク) を読みました。

他のツールを使用して SQLite データベースを作成した場合、その SQLite データベースで NHibernate を使用できますか?それは参照整合性を尊重しますか?

SQLite データベースを使用して nHIbernate で参照整合性を有効にする

0 投票する
3 に答える
1472 参照

database - データの冗長性

参照整合性制約は、データの冗長性の問題に対処するのに役立ちますか?

0 投票する
1 に答える
77 参照

ruby-on-rails - Rails ActiveRecordの関連付けを管理する適切な方法は何ですか?

Rails は初めてなので、ご容赦ください…</p>

2 つの異なるモデルに関連する一連のデータを作成しようとしています。私は現在、次のモデルを持っています。

このシステムでは、ユーザーは多数の Us と S を作成できます。しかし、M を作成するときは、「u」と「s」への参照が存在することを確認する必要があります。

私は次のことができることを知っています:

適切な参照がすべて含まれているのはどれですか。より良い方法はありますか?

0 投票する
9 に答える
8111 参照

sql - 参照整合性の維持 - 良いか悪いか?

監査が必要なテーブルごとにトリガーと個別の履歴テーブルを使用して、データベースに単純な監査証跡を導入することを計画しています。

たとえば、StudentScore テーブルを考えてみましょう。これには、対応する親テーブル (Student & Course) にリンクする外部キー (StudentID、CourseID など) がほとんどありません。

StudentScore に監査が必要な場合は、監査テーブル StudentScoreHistory を作成する予定です -

StudentScore のいずれかの行が変更された場合、古い行を StudentScoreHistory に移動します。

設計に関する議論で提起されたポイントの 1 つは、参照整合性を維持するために、StudentHistory テーブルの StudentID と CourseID を FK にすることでした。これを支持する議論は、ほとんどの場合、ハード削除ではなくソフト (論理ブール値フラグ) 削除を行うためであり、参照整合性を維持して、監査テーブルに孤立した ID がないことを確認するのに適しています。

これは私には少し変わったデザインのようです。監査記録が親データの削除を停止してはならないという@Jonathan Leffler のコメントに同意します。代わりに、これが必要な場合は、監査テーブルではなく、メイン テーブルの外部キーを介して処理する必要があります。外部キーを監査テーブルに拡張する際に何らかの価値が失われていないことを確認するために、意見を求めたいと思います。

ここで私の質問は次のとおりです。 これらの外部キーを履歴テーブルに入れるのは良い設計ですか?

重要な議論 (ex パフォーマンス、ベスト プラクティス、設計の柔軟性など) の詳細を教えていただければ幸いです。

特定の目的と私たちの環境を探している人の利益のために:

目的:

  1. 重要なデータ履歴を維持する
  2. シナリオの再作成をサポートするユーザー アクティビティの監査を許可する
  3. 限られた範囲でユーザー アクティビティのロールバックを許可する

環境:

  • トランザクション データベース
  • すべてのテーブルで監査が必要なわけではありません
  • 特に静的/参照データに対して、可能な範囲で論理的な削除を使用します
  • 非常にトランザクションの多いテーブルで、物理的な削除を使用するものはほとんどありません
0 投票する
3 に答える
1076 参照

sql-server - 3 方向の参照整合性 - SQL Server 2008

複数の市場で取引されている証券の価格を格納するために、SQL Server 2008を使用してデータベースを構築しています。

特定の市場では、すべての証券に同じ休日カレンダーがあります。ただし、休日のカレンダーは市場によって異なります。

次の 4 つのテーブルが必要です: MarketGoodBusinessDaySecurity、およびSecurityPriceHistoryであり、証券が取引された市場が閉鎖された営業日の行がSecurityPriceHistoryにないように強制したいと考えています。

テーブル内のフィールドは次のとおりです。

市場: MarketID (PK)、MarketName

GoodBusinessDay: MarketID (FK)、SettlementDate (ペアは PK)

セキュリティ: SecurityID (PK)、MarketID (FK)、SecurityName

SecurityPriceHistory: これが質問です - 私の好みは SecurityID、SettlementDate、SecurityPrice です

このようにテーブルを定義し、SecurityPriceHistoryのすべての行に対応する行がGoodBusinessDayにあることを保証するにはどうすればよいでしょうか?

MarketIDの列をSecurityPriceHistoryに追加したとします。2 つの外部キー (1 つはSecurityを指し、もう 1 つはGoodBusinessDayを指す) を使用してこれを行う方法はわかりましたが、それは正しい方法ではないようです。

0 投票する
1 に答える
8749 参照

mysql - zend アダプター beginTransaction() および commit() が失敗する

私は奇妙な問題に直面しています

Zend_DB_Adapter の beginTrasaction() メソッドと commit() メソッドが期待どおりに動作していないようです。beginTrasaction() および commit() メソッドで囲まれた (FOR LOOP 内の) INSERT ステートメントがあります。しかし、以下のようにエラーが発生した場合でも、エラーが発生したためコミットが行われないことを期待していましたが、すでにいくつかの行が挿入されていることがわかります。なぜなのか理解できません。誰か助けてくれませんか。ありがとう。

SQLSTATE [23000]: 整合性制約違反: 1062 キー 'PRIMARY' のエントリ '0' が重複しています

次のようなコードブロック:

0 投票する
1 に答える
1647 参照

mysql - MYSQL結合テーブルを複数回

イベントの行を含むテーブルがあり、それぞれに(他の多くのフィールドの中で)、、がaddedbyuserありeditedbyuserdeletedbyuser 特定のユーザーにテーブルをINT参照します。usersフィールドの1つ(たとえばaddedbyuser)に問題なく参加できますが、残りのフィールドに参加してphpで参照するにはどうすればよいですか?

イベントテーブル:

ユーザーテーブル:

基本的に、記事を追加、編集、削除した人の名前を表示したいのですが、これを1つのSQLクエリで実行できますか?

0 投票する
4 に答える
8092 参照

sql - SQL Server:削除する行を参照している行があるかどうかを知る方法

FK を介して削除する行を参照している行がある場合、その行を削除することはできません。

DELETEステートメントを実行する前に、削除する行を参照している行があるかどうかを知ることはできますか?