SQL模式实体设计问题

时间:2011-06-24 17:55:37

标签: sql

我正在尝试为寄售商店的POS系统设计架构。我有一个主项目的表和多个实体,它们将其作为外键引用并包含不同的属性。 items表包含所有项目共有的所有信息,无论其类型如何。引用任何给定项目的实体为该给定项目类型提供特定属性。例如,“拆分”项目需要询价,而商店项目需要成本价格。

虽然这个设计在技术上工作并且只在items表中强制执行一个项目,但我希望能够维护任何给定项目仅由其中一个实体引用。令人担忧的是,我不想要一个“拆分”项目,我也不认为是“商店”项目。有没有办法通过架构设计来强制执行此操作?

ERD在这里:http://randywestergren.com/pos-erd.pdf

有问题的表格是phppos_items,phppos_items_entity_split,phppos_items_entity_store等。

提前致谢!

2 个答案:

答案 0 :(得分:1)

您似乎在确定某个项目是否为“拆分”或“存储”类型,相关行是否存在。相反,如何在items表中添加类型字段?它不会阻止其他相关行实际存在,但它会让你明确知道这是一个错误。

答案 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
}

由于类型项键和类型描述符id是主键的一部分,因此您知道您的模型将不允许项属于2个不同的子项类型详细信息表。

如果你想要(偏执)完整性,你现在可以在这些类型细节表上添加一个约束,确保该项的密钥与该表中存在的该类型的常量类型描述符值配对。