質問: ※ベストアンサー付けてしまいましたがこれは操作ミスで、まだ解決していないです。 お世話になります。 テーブル設計で悩んでいることがあります。 ![イメージ説明](https://teratail.storage.googleapis.com/uploads/contributed_images/d1a7941959459ac2b6ddcded368b208b.png) 非常に簡単な例ですが、上図のような商品マスタの設計で、 productテーブルには自社の製品コードと他のテーブル間(例ではproduct_info、deliveryテーブル)で共有するフィールドがいくつか入っています。product_infoはその製品の詳細なスペック表のイメージです。 問題なのはproduct_infoに入っている製品情報は自社だけでなく、他社の製品の情報も入っており、productとは別のコード体系で管理されていて、かならずしもproductテーブルと紐付いている訳ではないところです。 仕様ではproduct_infoテーブルはcsv形式でデータ更新を行う予定で、 product_infoを更新するときにproductテーブルに紐付いているフィールドはproductテーブルも更新します。 このような設計でも運用出来なくは無いですが、今後の運用に不安を感じています。 できれば同一のフィールドを複数テーブルで持ちたくないのですが、何か良い案はないでしょうか。 少し例が分かりづらいかもしれないですが、よろしくお願いいたします。 追記 product_infoテーブルで持っている他社製品情報はこのテーブル以外では参照しません
回答: product は自社製品の情報 delivery は他社製品の情報 product_info は製品の詳細情報 という扱いで合っているのでしょうか。 この結果として、product_info のレコードは、product か delivery のどちらかに紐付く、と。 本来なら product_info を product と delivery のそれぞれに対して別々に用意した方がよいような気がします。 ただそれが出来ないなら、product_info には別の ID を振るようにして、そのIDとproduct、delivery のID との間を紐付けるためのテーブルを別に設けてやる感じでしょうか。 あるいは逆に、product と delivery を一つにまとめてしまう(自社でも他社でも「製品」だからエンティティーとしては一つ)か、ですかねえ。