通常、「食べ物」のような孤立したテーブルがあることは、何かが欠けている兆候です。関係するデータが非常に多い場合は、ある程度の容量で注文モデルにリンクしていると思います。少なくとも、どの代理店がどの種類の食品を在庫しているかについて、何らかの指標があります。
不思議なことに欠けているのは、「家族向け」のようなデータがこのスキーマからどのように計算されるかです。この情報の出典はなく、「家族で提供された」記録や、毎日または毎週の要約を入れて合計する場所さえないようです。
「Zips」テーブルは、郵便番号によってリンクされる可能性のある追加のデータがある場合にのみ関連します。緯度/経度のデータベースまたは人口統計データがある場合、これは理にかなっています。ただし、実際の外部キーを持つことはやや手間がかかります。zipがわからない場合はどうなりますか?何らかの理由でzipが米国外にある場合はどうなりますか?5桁と9桁の郵便番号をどのように処理しますか?
zipはユーザーが作成するものではないため、zipテーブルはほとんどの場合、参照される場合とされない場合がある補助的な情報です。これは、分離された「参照」テーブルの候補として適しています。
このような図の構造は、アプリケーションのフロントエンドに大きく影響されることに注意してください。ユーザーが食品の注文を追加している場合、それは3つすべての関係に変換されます。代理店が毎日の活動ログに基づいてレポートを作成している場合は、もう一度、これら3つのエンティティ間の関係が必要です。
フロントエンドは通常、ユースケースに基づいているため、関連するすべてのユースケースに対応していることを確認してください。