Serviceを読んで理解し、同意したものとみなします。スタック・オーバーフローはプログラマーとプログラミングに熱心な人のためのQ&Aサイトです。2,004件1たとえなのですが、ショッピングサイトを作っているとします。化粧品とゲームが買えるとします。買った物の履歴を見れる機能もあるとします。履歴テーブル、化粧品テーブル、ゲームテーブルと作ります。値段、対応ハードウェアとします。ここで問題なのは履歴テーブルのカラムです。単純に考えるとこう考えました。時間しかしこの構造には問題があります。化粧品idとゲームidのカラムはどちらか一つしか使われないため、後はnullが入ることになります。玩具や食品などを追加すると空のカラムが増大していきます。どのように設計するのが良いでしょうか?ご回答よろしくお願いします。6:24ご回答ありがとうございます。必要があるのかについては、例が悪かったのですがあるとおもっています。ゲームには対応ハードウェア、化粧品には材料、というカラムがあった場合一つのテーブルで表現するのは難しいかと思います。リンク先を見させていただきました。6:35なるほど、そういう背景があったのですね。質問文の下にある「編集」リンクから質問を編集して、そのことが伝わるような例に修正していただくと、他の方にわかりやすいかと思います。6:47ありがとうございます。票1こういったケースでは、ひとつのテーブルで管理するよりきちんとテーブルを分けて整理するほうが好ましいです。化粧品テーブルとゲームソフトテーブルで共通の要素(商品名)を抽出した、商品テーブルを作りましょう。化粧品なら材料ゲームソフトなら対応ハードジャンル対象年齢といったことは、商品に付属する情報とみなせるので、付帯情報をまとめるテーブルを作りましょう。これで、履歴テーブルからnullのカラムを追い出すことができます。14:00:00例えでは付帯情報テーブルの"内容"に文字列を直接入れていますが、この内容も別テーブルに切り出しても良いでしょう。個の銅バッジご回答ありがとうございます。共通の物をまとめたテーブルをつくり、付属する情報は別テーブルに出し、そして別テーブルから共通するテーブルへのIDを持つことで、nullをなくすことができるのですね。ありがとうございます、こちらのやり方でやっていこうと思います。|0もし「テーブルを利用するコード側で頑張り尽くす」というのであれば、外部キー制約を使わずテーブル名をレコードに書く、という選択肢を選ぶことができます。|回答スタック・オーバーフローに参加してくれて、ありがとうございます!質問の回答を共有してください。回答を説明し、自分の検討結果も共有してください。意見を述べること(意見を述べるなら、参照リソース、自分の経験で意見をサポートしてください)さらにサポートが必要な場合このヘルプを参考してください。“回答を投稿”をクリックすることで利用規約、プライバシーポリシー、及びクッキーポリシーに同意したものとみなされます。タグが付いた他の質問を参照するか、自分で質問をする。会を開催します🎉サイトの未翻訳箇所を見つけて、もくもく会で直しましょうリンク集1RDBのテーブルで、任意のどちらか片方のテーブルだけと関連付ける方法について教えてください。質問のフィードこのRSSフィードを購読するには、このURLをコピーしてRSSリーダーに貼り付けてください。