aono1234
@aono1234

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SQLのコーディンク効率を上げるER図の書き方

SQLコーディングを効率よく書くためにER図を書く際の留意点を教えてください。

素人ながらWEBアプリを要件定義~デプロイまで行いました。(フレームワークなしで)
その際、課題として感じたのが「SQL文が冗長で分かりにくくなっている」ということです。
特にJOIN命令が長くなる傾向にあります。

最初のER図から形が変化し、最終的には以下のようになりました。
(ちなみに制作したアプリは日報作成およびグラフ集計が目的です。)キャプチャ.PNG
最終版はcompanysテーブルから2又に分岐していますが、最初は全部のテーブルが数珠つなぎ状態でした。
なぜリレーションを変えたかですが、データを検索する際に数珠の頭と尻で距離が長くなり、
SQLのJOIN文が長くなりコーディングの負担が大きくなったからです。

しかし、この最終版でもまだSQL文の可読性が悪いと感じておりました。
例えばreportsテーブルを元にworksテーブルの情報を検索したいときに
とても不便に感じておりました。
今更ですが、worksとreportsを中間テーブルを介して結んでやればよかったのかもしれません。
または、ショートカット経路を作る(jobclasssesとreportsのリレーションを結ぶ)などすればよかったのかも…

以上の経験から判断するにER図は数珠状でなく蜘蛛の巣状のほうが良いのではないかと感じました。
ただER図が見にくくなってしまう可能性もあります。

この考え方はあっているでしょうか?
皆様の見解を伺えればと思います。

また数珠繋ぎの場合、どのようにして端から端までSQL文を短く記載できるかも教えて頂けないでしょうか?

以上、よろしくお願いいたします。

0

2Answer

RDBのテーブル設計にアートはいりません。アプリのエンティティとリレーションが決まれば、あとは正規化を粛々と進めていき、最終的に皆大体同じようなテーブル設計に収斂します。
つまり、テーブル設計を考える段階で、SQLの効率性は考慮するべきではないということです。きちんと正規化されたテーブル設計のRDBに対して、必要なデータを取ってくるのにSQLが長くなることはやむを得ません。

1Like

Comments

  1. @aono1234

    Questioner

    ご助言ありがとうございます。優先順位を理解できました!

可読性は大事ですが、システムが実現したいことは可読性ではありません。
可読性のために設計を変更するようになってしまうのは、目的と手段が入れ替わってしまうようのもので、本末転倒です。

可読性が悪くなるのはだいたい次の2つのケースです。

  1. 元のイメージが複雑で、それを形にすると複雑になる(そもそものやりたいことが複雑)
  2. 元のイメージはシンプルだが、それを複雑に作ってしまっている

「分かりにくさはどこからきているのか」を考えるのが良いと思います。

また、テーブル設計はデータの正しさ(矛盾がないこと)が重要です。
アプリケーション(フレームワークやパフォーマンス)の都合でカラムやテーブルを追加することはありますが、データの正しさを保証できなくなっては意味がありません。

1Like

Comments

  1. @aono1234

    Questioner

    「分かりにくさはどこからきているのか」
    この観点がなかったように思います。一度設計したものを振り返ってみて確認してみます。
    ありがとうございます。

Your answer might help someone💌