私は近いうちに実装する予定のMySQLデータベースの大まかな設計をしていますが、技術的に正しいかどうかはわかりません。私は私の心の中で、データベースの設計で、したがって疑問を正式な教育を取られたことがない:MySQLデータベースデザイン
エンティティ/テーブル
- 商品(P_ID、名前)
- パッケージ(P)ID、名前)
- Default_Package(* Commodity_ID、* PACKAGE_ID、P_ID)
- Custom_Package(* Commodity_ID、* PACKAGE_ID、ORDER_ID、P_ID)
- 注文(P_ID、PACKAGE_ID、Custom_Package = 0)
これは、システムが動作するように設計されてどのように基本的である:
- 管理者は、
- ユーザーがデフォルトのパッケージを購入する必要がdefault_packageテーブルに格納されているデフォルトのパッケージの束を作成しますOrder_IDテーブルのPackage_IDフィールドで参照されています
ユーザーはデフォルトパッケージをカスタマイズできます。彼らがそうすることを選択した場合、Custom_Packageフィールドは1にフリックされ、カスタムパッケージの情報はCustom_Packageテーブルに格納されます。
ルックアップを実行すると、ordersテーブルのcustom_packageフィールドがチェックされます。 0の場合、packageはdefault_packageリストから取得されます。これは、注文に戻って参照するすべてのレコードを取得することによってCustom_Packageリストから取得されます。
データベース設計と実装に関する私の経験から、これはうまくいくはずです。しかし、これが最善の方法であるかどうかはわかりません。
誰かが意見を分かち合うことができたら本当に感謝します。
:)
別の理由がない限り、デフォルトのパッケージとカスタムパッケージを1つのテーブルに入れ、フィールドを示しますパッケージの種類また、パッケージIDが一意である(つまり、すべてのパッケージに一意の名前がある)場合、このデザインに基づいて、パッケージにそれ自身のテーブルが必要な理由がわかりません。 – Sparky
パッケージテーブルを削除すると、反復的なデータ・セットを独自の表に入れることを求める正規化規則パッケージは複数の商品で構成されています。したがって、複数の商品を含むパッケージの場合、商品IDごとにパッケージ名が繰り返されます。 カスタムパッケージとデフォルトパッケージを1つのテーブルに移動すると、既定のパッケージを取得しようとするたびにWHERE句をどのように含める必要があるかを考慮して、少し時間をかけて検索する必要があります。 1つ余分なテーブルは本当に傷ついてはいけません。 – captainspi
あなたの例に基づいて、私は同意します、コモディティテーブルは別々でなければなりません。あなたのレスポンスに基づいて、私はパッケージが名前の小さなセットであると仮定しているので、同じテーブルにあるべきではありません(リピートを防ぐため)。 – Sparky