存储订单地址的最佳策略

Ran*_*ash 1 mysql sql rdbms database-design

我有一个“战略”问题。

事情是,我们有一张客户地址和客户订单的表格。结构类似于(只是一个例子,忽略归档类型等):

Address
id INT
line1 TEXT
line2 TEXT
state TEXT
zip TEXT
countryid INT
Run Code Online (Sandbox Code Playgroud)

为了保持数据的历史有效性,我们将这些地址与订单一起存储在文本字段中(以前它是通过引用完成的,但这是错误的,因为如果地址更改,所有旧订单也会更改交货地址,这是错误的)。例如:

Orders
id INT
productid INT
quantity INT
delivery_address TEXT
Run Code Online (Sandbox Code Playgroud)

delivery address 类似于 CONCAT_WS("\n",line1,line2,state,zip,country_name)

一切都很好,很花哨,但是似乎客户需要访问历史数据并能够以 XML 格式导出这些数据,他们希望再次正确拆分这些行。因为有时没有 line2 或 state 或 zip 或其他什么,我们如何以一种方式存储这些信息,然后我们可以破译每行的“标签”?

建议存储为 JSON 编码的数组,但这是最好的方法吗?我想将它存储为 XML ……或者创建那些 6-10 个额外的列并为每个订单存储地址数据?也许你们中的一些人在处理这种事情方面有更多的经验,并且能够为我指明正确的方向。

提前致谢!

Kev*_*ton 5

我个人会将地址建模为单个表,地址的每次更新都会生成一个新行,这将被标记为当前地址。

我想如果没有相关订单,您可以允许删除,但是将旧记录标记为不活动会更简单。

这将允许您保留订单和地址之间的关系,并在以后轻松查询历史数据。

请参阅维基百科条目以了解缓慢变化的维度