我正在尝试创建简单零售链类型数据库模型的ER图。你有你的客户,各种商店,库存等。
我的第一个问题是,如何代表客户在商店下订单。如果客户是折扣卡持有人,公司有他们的姓名,地址等,所以我可以让cardHolder实体连接到商品并存储订单关系。但是,我如何表示由数据库中实际不是实体的客户下订单?
其次,如何在ER图中表示条件...的东西,例如在汽车经销商中,顾客在购买汽车时可以选择一个或多个可选的额外费用。我认为有一个Car实体具有相关属性和选项作为多值属性,但是如何表示用户选择这些选项(即订单表显示订购的汽车,选择的额外设备和额外的附加成本)在订单关系中?
答案 0 :(得分:0)
首先,您真的需要将客户建模为不同的实体,还是只需要订单,付款和交付详细信息?许多零售系统不跟踪个人客户。如果需要,您可以拥有一个带有代理键的客户表,以及识别SSN或折扣卡号等属性的唯一约束(即使这些属性是可选的)。通常很难防止客户表中的重复,因为人们没有理想的自然键,因此请考虑是否真的需要这样做。
如何建模可选附加内容取决于它们所依赖的内容。一些额外的东西可能是制造或模型特定的,例如选择某些颜色或手动/自动变速器。可以全面提供延长保修。
以下是特定于汽车的可选附件的示例:
car (car_id PK, make, model, color, vin, price, ...)
car_extras (extra_id PK, car_id FK, option_name, price)
order (order_id PK, date_time, car_id FK, customer_id FK, payment_id FK, discount)
order_extras (order_id PK/FK, car_id FK, extra_id PK/FK)
我排除了价格总计,因为这些可以通过汇总查询来计算。
在我的示例中,order_extras.car_id
是多余的,但通过使用复合FK约束支持更好的完整性(即(order_id, car_id)
引用order
中的相应列和(car_id, extra_id)
引用car_optional_extras
中的相应列以防止无效的额外内容链接到订单。)
这是上表中的ER图: