我应该创造什么样的关系?一对一还是一对多?

时间:2015-08-17 14:50:36

标签: sql database ms-access ms-access-2007 ms-access-2010

我正在使用MS-Access数据库。

我正在尝试与两个表建立关系,Old Customer表有数据和新添加的优惠券表。

由于我的客户想要推出优惠券的新概念,客户可以使用优惠券而非现金。

我已在优惠券表中批量插入优惠券代码。

现在,我对我应该用这两个表创建什么样的关系感到困惑?

我必须考虑以下事情......

  1. 客户可以提供现金或优惠券。

  2. 如果客户出示优惠券,CouponID栏中会有一个条目 以及现金栏(了解该优惠券的价值)。

  3. CouponID在客户表中应该是唯一的,优惠券代码应该是 不要重复。

  4. 我很困惑它应该是一对一还是一对多?

    此图片可帮助您了解问题。 enter image description here

2 个答案:

答案 0 :(得分:1)

我根本不会在客户表中包含“CouponID”(也不包括“现金”)。客户表为客户建模,优惠券表格为优惠券。 您需要另一个表来模拟事务:

[CustomerTransaction] ID 日期 顾客ID coupon_id

等等......

每种类型的独立“事物”都应该由离散表建模。和“事物”应该由创建1:N关系的其他表相互关联。

答案 1 :(得分:0)

客户与优惠券的关系是可选的(即可空)一对一;你的数据模型看起来不错。

其他一些评论:

  • 该表格更好地命名为sale而非customer,因为如果同一客户再次回来,则会有一个新行(但名称相同)
  • 您可以在couponID上创建一个忽略空值的唯一索引
  • 您可以将Cash重命名为Amount;金额为 “现金”优惠券 - couponID列会告诉您金额的类型

创建一个忽略空值的唯一索引:

CREATE UNIQUE INDEX idx1 ON customer (couponID) WITH IGNORE NULL;