質問: ### 前提・実現したいこと データベースにはmysqlを使い、送金を記録するシステムをつくりたいと考えています。 送金が行われたら記録をするのですが、想定される状況として 「注文なしで行われる送金」(送金のみ)と、 「注文ありで行われる送金」(何かを購入して送金した)と、 「一つの注文から複数の送金」が あるとします。 この場合、以下のようなデータベース構造になるかと思います。 注文テーブル | ID | 取引先ID | 担当ユーザーID | 合計額 | | --- | --- | --- | --- | 注文詳細 | ID | 品物ID | 品物数量 | 品物価格 | | --- | --- | --- | --- | 送金記録テーブル | ID | 送金額 | 担当ユーザーID | 注文ID | | --- | --- | --- | --- | ※担当ユーザーテーブルと取引先テーブルと品物テーブルは問題の箇所ではないため省略しています。 ### 問題点 ただ、上記のようなデータベース構造では送金記録テーブルの注文IDがない(NULL)パターンが発生することがあるので、外部キー制約にひっかかってしまい作成することができません。 NULLを許容するという方法も考えたのですが、調べたところ「極力nullはさけた方がいい(値ありか空値かnullかという確認がややこしくなるから)」と書かれていたため、not nullなデータベース構造にしたいと考えています。 今回の様なケースの場合でも、not nullなデータベース構造にすることはできるのでしょうか? 教えて頂ければ幸いです。
回答: > > 極力nullはさけた方がいい(値ありか空値かnullかという確認がややこしくなるから) > > > 質問の根拠である上記の情報源は何でしょう? 「極力nullはさけた方がいい」については前提条件がありませんでしたか? 内容からすると、Not Null制約は付けるべきでは無いと思われます。 ※どうしてもという事であれば、注文IDが取り得ない値をデフォルト値に設定することでしょうか。