データベースの排他的アークとは何ですか?なぜそれが悪いのですか?


10

私は、stackoverflowに関する開発者のQ&Aによって発生した最も一般的なデータベース設計の間違いを読んでいました。最初の答えは、排他的な弧についての句がありました:

排他的アークは、テーブルが2つ以上の外部キーで作成され、そのうちの1つだけがnull以外になる可能性がある一般的な間違いです。大ミス。1つには、データの整合性を維持することがはるかに困難になります。結局のところ、参照整合性があっても、これらの外部キーの2つ以上の設定を妨げるものはありません(複雑なチェック制約にもかかわらず)。

なぜ独占アークが邪悪なのかよくわかりません。基本的には理解できなかったのでしょう。独占アークについての良い説明はありますか?

回答:


8

ずっと前に私が理解した限りでは、排他的な弧には、テーブルに他のテーブルへの外部キーである列がいくつか含まれていますが、一度に設定できるのはこれらの1つだけです(ドメインに対する何らかの論理制約のため)。現実の世界から続く)。このルールはデータベースに適用できないため、これらの外部キーの1つ以上に値がある場合に破損したレコードが作成される可能性があります。

例を挙げましょう。会社が商品の配送に使用するトラックを追跡するアプリケーションを考えてみましょう。トラックは、同時に3つの場所のうちの1つにしか存在できません。従業員と一緒にいることも、駐車場にいることも、メンテナンスショップにいることもできます。これは、employeeId、parkingGarageId、maintenanceShopIdを持つトラックテーブルを作成し、Employee、ParkingGarage、MaintenanceShopテーブルを参照することでモデル化できます。これらのフィールドの1つだけがデータベースのレベルで入力されるというルールを適用する方法はありません。不正なコードまたはデータベースに直接アクセスできる誰かが、2つまたは3つのフィールドが入力されたレコードを挿入する可能性があり、これはデータベースのデータ破損を意味します。


4
3つの可能なトラック位置は、スーパークラスの「トラック位置」のサブクラスです。サブクラスが相互に排他的である多くの場合があります。課題は、リレーショナルテーブルでクラスとサブクラスをモデル化する方法になります。
Walter Mitty 2014

この設計を使用することが正当化される場合があることに同意します。ただし、このパターンは必要以上に多く使用されるという元の投稿にも同意できます。非常に大きな欠点もいくつかあります...
JDT 2014

6
チェック制約は使用できませんか?例えばalter table mytable add constraint myconstraint check ((col1 is not null and col2 is null and col3 is null) or (col1 is null and col2 is not null and col3 is null) or (col1 is null and col2 is null and col3 is not null))。排他的なアークは好きではありませんが、チェック制約で強制できます。もちろん、FK制約も存在する必要があります。
TulainsCórdova14年

1
したがって、上記の引用からの「複雑なチェック制約にもかかわらず」。チェック制約や一体、さらにはトリガーを使用して本当に洗練された検証を行うことができるかもしれませんが、それは良いアイデアや優れた設計のトークンにはなりません。4列または5列の排他的アークに対してチェック制約を行うことを想像してみてください。また、すべてのデータベースエンジンがCHECK制約をサポートしているわけではないと確信しています。MySQLはドキュメントでCHECK句は解析されるが無視されると明示的に述べています...
JDT

このソースは、排他的な弧を推奨しています。考え?
Alex Moore-Niemi、2016年

4

排他的なアークについては何も悪いことはありません。チェック制約を使用して、対応するビジネスルールを適用するだけです。ほとんどの主要なデータベース管理システムはチェック制約をサポートしています(Oracle、SQL Server、PostgreSQL)。データモデリングツールを使用している場合は、ツールがチェック制約を実装するコードを自動的に生成する可能性が高くなります。


-1

排他的弧は、概念設計または論理設計で非常に役立ちます。そのように実装する必要があるという意味ではありません。以前の例では、設計者は3つのテーブルを使用して設計を実装することを決定します。1つは駐車場用、もう1つは従業員用、もう1つは整備工場用です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.