首先关闭全部的异地表访问权限. 使表只能被从本地访问. 这就跟在面向对象的编程方法中使用方法来封装属性是一样的道理: 属性被设为私有, 必须通过方法进行访问 ------ 通过这种方法, 可以实现良好的状态管理.
数据库"属性"即表被封闭以后, 可以使用储存在本地的存储过程对数据进行访问. 使用储存在本地的存储过程的原因是, 数据库被设置为只允许本地访问.
然后, 通过在存储过程中写入数据之间的约束, 或对数据的操作之间的约束, 数据库被成功地封装成一种服务. 而不是简单地向外提供以数据为中心的数据服务, 而是提供以服务为中心的数据服务. 也就是说, 通过将数据封装成对数据的访问, 使得数据库被真正封装成一种服务.
这样, 一方面使得数据服务的使用者不用关心数据之间的约束, 完整性或一致性, 可以集中精力在编写业务逻辑, 另一方面, 数据库的逻辑设计者也由此得到了一个地方去放置一些不适合放在表创建语句中的数据约束或关系, 特别是一些系统级约束.