前提・実現したいこと
仮定1) 毎年変更のある本の名前DBに保存させる。
仮定2) 毎年変更のある筆者の情報をDBに保存させる。
ご指摘いただきたい点
中間テーブル同士(author_bookテーブルとbook_yearテーブル)をさらに中間テーブル(author_book_yearテーブル)にすることは良いのか悪いのかをききたいです。
該当のイメージ図
該当のイメージ図2
発生している問題・エラーメッセージ
素人ながら中間テーブル同士の結合をして良いのかDB設計に悪戦苦闘しております。 DB設計をご教授いただけたら幸いです。
タイトルはなるべく詳細要件を記載願います。汎用的すぎたり起きている問題に対して大きすぎるカテゴリだと要件も伝わりにくくなります
あと、 細かいんですが
>最後までお願いいただけますよう
どういう意味でしょうか
変更しました。
パフォーマンスまで追求されるのでしたらどれくらいのスパンでどれくらい増えるとか、指標が必要です。
それと、「毎年変更がある」って、本も作者も出版してしまえば変わることはないと思いますが…?
仮定になります。
もう1点。
何に悩んでいるのかわかりません。レビュー依頼(この時点で質問ではないです)にしては要件など不足している部分が多すぎます。
DB設計はあくまで基本設計フェーズです。どういう要件に基づいて作られたDB設計なのか、もっと詳細の要件定義を提示する必要があるのではないでしょうか。
パフォーマンスと言えど目指す指標があるはずです。
システム全体から考える必要もあるはずです。
内容によっては単なるQAにおさまるものではなくなり、きちんとお金を払ってコンサルに入ってもらう必要が出てきます(業務であれば尚更、無責任な赤の他人が手を出していいわけがありません)
回答に必要な情報があまりにも不足しているので必要な回答は得られにくそうかなと思います。
何に悪戦苦闘しているのかを具体的に質問に書くと、回答が得られやすいと思います。
「ふさわしい」とは、具体的に何を、どのような指標で評価するのかを示してください。
DBが備えるべき機能(どのような使い方ができるようにするか)と、実装上の優先順位(検索速度が速い、更新が容易、必要とするメモリやディスクの容量が少ない、等々)を明らかにすると回答が得られやすいと思います。
図では、どのテーブルにも"id"という同じ名前の項目(プライマリーキー?)があり、他のテーブル名+"id"という名前の項目で他のテーブルのidを参照しているように見えますが、項目には意味の分かる項目名をつけたほうが判りやすいです。
例えば、bookテーブルのプライマリーキーは"book_id"、authorテーブルのプライマリーキーは"author_id"などというように。
中間テーブル同士(author_bookテーブルとbook_yearテーブル)をさらに中間テーブル(author_book_yearテーブル)にすることは良いのか悪いのかをききたいです。に追記いたしました。
例えばですが、
2018年に「ほげほげ」さんが「ほげ本」というタイトルの本を出したとして、
2019年に「ほげほげ」さんが名前を「ふがふが」に変えたとき、
「2018年-ほげほげ-ほげ本」という3点セットを、
「2019年-ふがふが-ほげ本」という3点セットに変更していいのでしょうか?
多分ダメなのでしょう?
同様に本の名前も変わる前提だけど、同様に既存のデータは変わってしまってはいけないのでしょう?
では、同じタイミングで同じ著者が書いた別の本で、著者の名前が違うということはあるのでしょうか?
各テーブルに格納したい内容を日本語で説明した方が欲しい答えが返ってきやすいですよ