确保实体属于ER图中的另一个实体

时间:2018-01-20 17:55:07

标签: database entity-relationship

所以在图中我试图构建每个客户都有一张信用卡。然后订单实体将客户ID和卡号作为外键。我如何确保这些相关,并且订单中没有客户持有他不拥有的信用卡。

enter image description here

我想我可以通过付款实体来做到这一点。告诉我你的想法。

1 个答案:

答案 0 :(得分:0)

我想我的第一个问题是,如果信用卡有用户的外键,那么订单是否需要同时拥有客户ID和信用卡ID?你能不能从使用过的信用卡中找出顾客?

我不相信您可以拥有受表中数据限制的外键,事物的最佳验证(数据库)方面是外键,因此在客户表上有一个外键用于客户ID和信用卡表上的外键用于信用卡ID。如果您必须在表中包含两条信息,那么我怀疑最好的解决方案是添加一些业务逻辑,以在将卡插入表中之前检查该卡是否属于所述客户。

这种类型的业务逻辑可以通过c#或通过存储过程完成。

但伪代码应该是这样的:

public void InsertOrder(int customerId, int creditCardId) 
{
    var customer = db.GetCustomer(customerId);
    var cards = db.GetCardsBelongingToCustomer(customerId);
    if(cards.Any(card => card.Id == creditCardId))
    {
      db.InsertOrder(new Order{});;
    }
}
相关问题