レシピ削除でも買い物リストを守る ― Ai-meshiのデータ設計とER図
個人開発「Ai-meshi」のデータベース設計(ER図)です。実際に運用する中で起きた不具合をきっかけに、テーブル設計を見直した過程を示しています。 【起きた問題】 当初、買い物リストはレシピを参照する形で実装していました。そのため、あるレシピの作成者がそのレシピを削除すると、それを買い物リストに追加していた別のユーザーの項目まで一緒に消えてしまう不具合がありました。親(レシピ)の削除に、子(買い物リスト項目)が巻き込まれていたのが原因です。 【どう直したか】 買い物リストに追加する時点で、レシピ名や材料といった必要な情報を shopping_list_items 側のテーブルに保存(スナップショット化)し、レシピ本体への参照依存を切りました。これにより、元のレシピが削除されても、各ユーザーの買い物リストはそのまま保持されます。 【この設計から学んだこと】 「どのデータが、どのデータの生存に依存してよいか」を意識するようになりました。利便性のために安易に参照でつなぐのではなく、ユーザーが持つべきデータは独立して保持する、という判断ができるようになった経験です。 ※ ER図中の shopping_list_items が、レシピ削除後も食材情報を保持するテーブルです。

