信息唯一性原则

本人偶然间想到,Google了半天也没有找到相似的东西。在此抛砖引玉,望各位不吝赐教。

信息唯一性原则是解耦合与促进一致性的数据结构设计方法。一个信息只出现一次,其他地方只是引用。

比如客户买书《xxx》这一业务,需要进行两次相关操作,即书店将《xxx》这种书的数量减1,客户账户中《xxx》这种书的数量加1。需要注意,这里是《xxx》,是指一个种类,后面建模时提到的《xxx》是具体的卖出的那一本。

这个过程缺一不可,如果只让书店减1,忘记了客户加1,则客户买不到书;反之,则是卖出的数量会超过书店的存货。

在数据库领域,采用ACID方式来解决,就是事务。将书店减1和客户加1看作一个整体,其中一个操作失败,就算这两个操作整体失败。这样可以保证一致性。

你会发现,这一业务中,数据需要从两处地方配合起来说明买卖的数量。这就产生了一个耦合。但通常我们认为这种耦合是天经地义的。

不过,耦合就意味着大量验证,保持信息唯一性原则或许可以减轻验证的负担。

经过分析,我们发现,这里的加1减1实际上是买卖的那本《xxx》书的数量属性。上面在处理业务时将卖出的那本《xxx》书忽略掉了,只将他其中的一个属性保存在了变量中。

在整个买卖过程中,《xxx》书的交换,其本质是卖出那本《xxx》书的所有人发生了变化。从书店变为了客户。

因此,在信息唯一性原则下,首先要建立卖出《xxx》书的实体,然后定义其数量和所有人。买卖的过程,就是所有人属性发生变化了的过程。

这样,书店的《xxx》这种书的总数,和客户的《xxx》这种书的总数,就从直接影响业务的数据,变成了一个随时可以重算的统计结果。他们共同受所有《xxx》书实体的所有人属性和数量属性的影响。

这样,原来需要ACID事务支持的买卖业务,就变成了一个普通的业务。

同样的道理,客户付钱也是一样。付款可以将人民币创建一个实体,其数量就是《xxx》本书的卖出价格(可能会涉及打折等因素,与标价不一致,是每一本卖出《xxx》书的特有属性)。

书的交换和钱的交换是同时发生的,但在信息唯一性原则下并不需要ACID支持。如果书的所有人发生了变化,而钱忘记了。则在统计的过程中,应付账款与已付账款就有一个差额,卖家很容易判断和发现。此时客户可以再次付款,直到付款成功。反之,钱付了,而书忘了变换所有人,则也有差额,客户的付款就变为了预付款。客户可以用这个款项再去买书,直到买到为止。

信息唯一性原则的本质在于,实事求是的将客观世界发生的事情告诉计算机,记录下每一个与业务相关的现象。这些现象作为计算的基础。如果计算机忘了处理一些现象,那么说明其认识的世界是残缺的,但残缺的世界也是可解释和理解的。人类能够修复其认识上的缺陷,从而保证其正确性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值