首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带有外键的可变/不可变数据.数据库设计问题

带有外键的可变/不可变数据.数据库设计问题
EN

Stack Overflow用户
提问于 2014-04-25 20:38:50
回答 1查看 596关注 0票数 0

假设我们有一个网络商店,人们可以在那里保存他们的发货/账单地址供以后使用。我们将数据存储在关系数据库中,因此很明显,地址会得到自己的表。当客户进行购买时,我们要记录他为购买而选择的地址,以便他以后可以在他的购买历史中查看它。我们可以在购买表中创建一个外键到address表,以便DB保持一定程度的规范化,但是这样,我们必须确保地址是不变的,这样购买历史记录中的发货/账单地址就会保持不变。另一种方法是复制购买表中的地址,以便用户可以自由地从地址表中编辑/删除地址,并且购买历史记录保持不变。这种复制方案对于少量的数据很有效,但是假设我们希望在每个发送/计费地址上附加一张照片,现在它变得太贵了,特别是在智能手机等资源受限的设备上。哪种方法更好?还有其他处理这种模式的方法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-04-26 03:28:43

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

这一段信息将允许以下场景:

  1. 让用户输入一个新的地址-将不会有一个现有的参考购买历史,所以也可以编辑之前购买。
  2. 让用户选择一个现有的地址,该地址可能在以前的购买中使用过,也可能没有使用。
  3. 允许用户通过编辑新的和未使用的地址或选择以前使用的地址之一来更改购买地址。
  4. 如果用户编辑现有和使用的地址,则将其保存为新地址,而不是编辑原始地址(让他们知道/看到添加了新地址是个好主意)。

您可以通过向一个地址添加一个标志来提供一个伪删除功能,该标记指示它是一个历史记录(您还应该允许用户知道这个历史记录)。

托运与计费地址id:您可能已经这样做了,但这两个列需要在购买表中单独列。因此,用上面的控件精确地保存历史。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23302600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档