让我们来一个关系数据库,例如MySQL的。为了简单起见,我将专注于重要的事情:拥有一个包含订单的表,其中包含 function cropper_now(){
var $previews = $('.preview');
var cropBoxData;
var canvasData;
$('#image').cropper({
aspectRatio : 1 / 1,
viewMode: 1,
minCropBoxHeight : 200,
minContainerHeight : 200,
zoomOnWheel : false,
zoomable: false,
built: function () {
$('#image').cropper('setCanvasData', canvasData);
$('#image').cropper('setCropBoxData', cropBoxData);
console.log( $('#image').cropper("getData"));
},
crop: function (e) {
var json = [
'{"x":' + e.x,
'"y":' + e.y,
'"height":' + e.height,
'"width":' + e.width,
'"rotate":' + e.rotate + '}'
].join();
$('input[name="imagecropperdata"]').val(json);
}
});
(主键)order_id
和外键fk_supplier等字段,它们引用了一个主键。表格1}}。该表还有一个名为order_date
的字段。
现在,让我们想象一下,有一个php网站显示了在表格中生成的所有订单。该表的每一行都包含supplier
,supplier_name
和supplier_name(sql语句在两个表上建立了连接)。
到目前为止一切都还好。现在,有人更改了其中一个订单中引用的一个供应商的名称:历史数据变得不真实或错误。
我的问题是:为了防止这种情况,最佳做法是什么?我想到了三个解决方案:
所有这些方法都有优点和缺点。例如,点2似乎非常脏,并且违反了关系数据库的所有规则。在我看来,第3点通常是要走的路。但需要付出很多努力,编程明智。用户体验/可用性也非常糟糕。
我想听听,有经验的开发人员和数据库设计人员如何处理这个问题。
答案 0 :(得分:0)
选项3的一种形式,其中有关于供应商信息的StartDate和EndDate。这样,数据在所有时间都是准确的(供应商名称在给定时间是正确的)。您还可以做的一件事是创建一个电子表格,其内容每晚都会加载到数据库中,并且包含供应商信息(进入fact_Supplier表或查找表)。对供应商的所有编辑都要通过此电子表格,只有那些负责此类事情的精选人员才能访问。如果电子表格中有更改,则“供应商”表中的先前信息将结束日期,并且新记录将随新信息一起插入。任何变更都会发生这种情况,供应商名称,供应商地址等。
答案 1 :(得分:0)
将扩展我的评论:
我会选择选项2,但稍作修改:
优点:
缺点: