RDBって基本的に、リレーションを張る前提だとは思いますが、
プログラム上(特にORM機能を持つフレームワーク)でのリレーション設定をするだけで
それっぽい動きができることと、下手にリレーションを張ると複数テーブルに対して更新や削除を実施する際、
手間が増えるため、RDB上はリレーションを張らないように教えらてきました。
RDB上でリレーション設定をしているとDB管理ツール(phpMyAdmin等)で見たとき、
リレーション適用後の表示を確認できるので便利なのですが、RDB上ではリレーション設定をしないのは、
一般的なのでしょうか?
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
回答3件
0
下手にリレーションを張ると複数テーブルに対して更新や削除を実施する際、手間が増えるため、RDB上はリレーションを張らないように教えらてきました。
リレーションは良いんですけど、参照整合性は順序などの制約が絡んでくることはあります。
外部からのデータ投入などで、一旦制約を外してからデータ投入し、再度設定するとか。
RDB上でリレーション設定をしているとDB管理ツール(phpMyAdmin等)で見たとき、リレーション適用後の表示を確認できるので便利なのですが
単純なリレーションなら良いですけど、そうでない場合はツールで表せないばあいとかありますので、あまり精度は求めない方が良いと思います。
投稿2021/06/04 06:38
総合スコア25440
0
ベストアンサー
RDB上ではリレーション設定をしないのは、一般的なのでしょうか?
一般的ではありません。
余程の事情が無い限りは、バッドノウハウと言い切ってしまえると思います。
下手にリレーションを張ると複数テーブルに対して更新や削除を実施する際、手間が増えるため、RDB上はリレーションを張らないように教えらてきました。
これは一般的には手間が増えるというデメリットでは無く、
RDBMSの制約によって異常なデータが発生することが確実に防止され、適正な値のみが存在することを前提に出来るというメリットになります。
おそらくそう教えた人は
- ORMやフレームワークで正しくリレーションを扱う事が出来ない、部品化出来ない
- アプリケーションを開発する前にDB設計を行う事が出来ない(コーディングしながらDB設計をするので、途中でDB定義が変わると手間が大きい)
- アプリケーション仕様がコロコロと変わり、それがデータモデリングまで影響する様なまずい開発/運用体制である
- そもそもDB設計をレビューする、管理するという概念を知らない
などの理由から、バッドノウハウを正しいものと信じているんじゃないでしょうか。
RDB上でリレーション設定をしているとDB管理ツール(phpMyAdmin等)で見たとき、
リレーション適用後の表示を確認できるので便利なのですが、
phpMyAdminだと「あればちょっと便利」くらいですが、
一般的には、DB定義から(MySQLWorkbenchなどER図を使うことが多いです)DB設計のレビュー/管理を実施するため、アプリケーションのソースまで見ないとデータモデルが把握出来ない状態というのはかなり不便な状態になります。
パフォーマンスについてはケースバイケースですが、外部キーが存在しないことで性能が極端に悪化する場合もあります。
投稿2021/06/04 05:18
編集2021/06/04 05:31総合スコア18780
0
下手にリレーションを張ると複数テーブルに対して更新や削除を実施する際、
手間が増えるため
正しく設定すれば手間は減らせることもあります。ON DELETE CASCADEとすれば、親テーブルのレコードを削除する時に子テーブルのレコードを道連れにすることができます。
投稿2021/06/04 04:48
編集2021/06/04 04:48総合スコア147065
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
2021/06/05 11:50 編集