具有外键的可变/不可变数据 - 数据库设计问题

时间:2014-04-25 20:38:50

标签: database database-design

假设我们有一个网上商店,人们可以保存他们的送货/帐单地址供以后使用。我们将数据存储在关系数据库中,因此很明显地址都有自己的表。当顾客进行购买时,我们想要记录他为他的购买选择的地址,以便他以后可以在他的购买历史中查看它。我们可以在购买表中创建一个外键到地址表,以便数据库保持一定程度的标准化,但这样,我们必须确保地址是不可变的,以便购买历史记录中的送货/开票地址保持不变相同。另一种方法是复制购买表中的地址,以便用户可以自由地编辑/删除地址'表,购买历史保持不变。这种复制方案适用于少量数据,但我们希望将照片附加到每个送货/帐单地址,现在它变得过于昂贵,尤其是在智能手机等资源受限的设备上。哪种方法更好?有没有其他方法可以处理这种模式?

1 个答案:

答案 0 :(得分:0)

要允许用户管理他们的地址,您需要存储有关该地址是否已在购买时使用的信息(通过检查purchases表或addresses表中的单独标志)。这里解决方案的关键部分是这个标志或检查数据库,表明在购买时已经使用了地址,如@sqlvogel所述。

这一条信息将允许以下情况:

  1. 让用户输入新地址 - 在购买历史记录中不会有现有参考,因此也可以在购买前进行编辑。
  2. 让用户选择现有地址,该地址可能在以前的购买中使用过,也可能没有。
  3. 让用户更改购买地址,方法是编辑新的和未使用的地址,或者选择以前使用的地址之一。
  4. 如果用户编辑现有和已使用的地址,请将其另存为新地址,而不是编辑原始地址(最好让他们知道/看到添加了新地址)。
  5. 您可以通过向地址添加标记来提供伪删除功能,该地址表示它是历史记录(您还应该允许用户知道)。

    运费与结算地址ID:您可能已经这样做了,但这两个需要在购买表中是单独的列。因此,历史记录可以通过上述控制准确保存。