2011-06-24 15 views
0

私は委託ストアのPOSシステムのスキーマを設計しようとしています。私はマスターアイテムのテーブルとそれを外部キーとして参照し、異なる属性を含む複数のエンティティを持っています。 itemsテーブルには、そのタイプに関係なく、すべてのアイテムに共通するすべての情報が含まれます。任意のアイテムを参照するエンティティは、そのアイテムタイプに対して特定の属性を提供します。たとえば、「スプリット」アイテムには質問価格が必要ですが、ストアアイテムにはコスト価格が必要です。SQLスキーマエンティティデザインの質問

このデザインは技術的に動作し、itemsテーブル内の1つのアイテムのみを強制しますが、どのアイテムもこれらのエンティティの1つだけが参照するようにしたいと考えています。懸念事項は、私が「分割」アイテムを誤って「ストア」アイテムとみなしたくないということです。スキーマ設計を通じてこれを強制する方法はありますか?

ERDはここにある:問題のhttp://randywestergren.com/pos-erd.pdf

テーブルはphppos_items、phppos_items_entity_split、phppos_items_entity_storeなど事前に

感謝です!

+0

あなたはどのデータベースを使用していますか?オブジェクトリレーショナル、リレーショナル、nosqlですか? – Nate

答えて

1

アイテムが関連する行が存在する「分割」タイプか「ストア」タイプかどうかを判断しているようです。代わりに、アイテムテーブルにタイプフィールドを追加する方法はありますか?それは他の関連する行が実際に存在するのを妨げることはありませんが、それはエラーであることを決定的に知らせるでしょう。

1

二次テーブルを作成します。

 
typed_items (poorly named) 
{ 
    PK: item_key - this points to the item 
    PK: int item_type_id - this type code specified which 'type' of item, ie: store, split 

// optional, depending on your key design: 
//  1...n FK: 
//  split_item_id, 
//  store_item_id, 
//  etc.., if you reference the items PK in the sub-item-type-detail tables, this 
//  isnt nessicary. if you are using a synthetic key on the sub-item-type-detail 
//  tables and no key relationship exists you can use this table as a linking table, 
//  otherwise its not nessicary 
} 

型項目のキーと型descriminator IDは主キーの一部であるので、あなたのモデルは、アイテムが2つの異なるサブ項目に属さすることはできませんことを知っています-type-detailテーブル

整合性が必要な場合は、これらのタイプディテールテーブルに制約を追加して、そのタイプの定数タイプのデクリメント値とペアになっているアイテムのキーがこのテーブルに存在するようにすることができます。

+0

遅れて申し訳ありません。良い点は、どの項目がどの項目であるかを知る必要があるという点です。 エンティティ属性値の設計についてどう思いますか?任意の項目とその値の属性を定義する属性表と結合表があります。 – rwestergren