谁能解释在关系数据库中如何确保数据独立性?如果数据库结构发生变化,用户什么都不会改变是什么意思?
例如,我有关系 R(并创建了一个使用此关系的应用程序)并且数据库管理员决定将 R 分解为 R1 和 R2。如何为最终用户确保应用程序的不可更改性?
谁能解释在关系数据库中如何确保数据独立性?如果数据库结构发生变化,用户什么都不会改变是什么意思?
例如,我有关系 R(并创建了一个使用此关系的应用程序)并且数据库管理员决定将 R 分解为 R1 和 R2。如何为最终用户确保应用程序的不可更改性?
在我的数据库课上,我问了自己完全相同的问题。
根据Codd 的 12 条规则,有两种数据独立性:
你的问题表述的不是很清楚。我没有看到“数据独立性”和“应用程序不可更改性”之间的关系。
适当的关系结构将数据分解为实体和关系。这个想法是,当一个值发生变化时,它只会在一个地方发生变化。这就是各种“正常形式”数据背后的原因。
大多数用户应用程序不希望以标准化形式查看数据。他们希望以非规范化的形式查看数据,通常将许多字段聚集在一行上。同样,更新可能涉及不同实体中的多个字段,但对用户而言,这只是一回事。
关系数据库可以维护数据的结构,并允许您为不同的观点组合数据。这与你的第二点无关。应用程序独立性(我认为这是一个比“不变性”更好的词)取决于应用程序的设计方式。设计良好的应用程序具有设计良好的应用程序编程接口(也称为 API)。
似乎很多数据库开发人员认为物理数据结构作为 API 已经足够好了。然而,这通常是一个糟糕的设计决策。通常,更好的设计决策是通过存储过程、视图和用户定义的函数来执行所有数据库操作。换句话说,不要直接更新表。创建一个名为 usp_table_update 的存储过程,它接受字段并更新表。
有了这样的结构,你可以在修改底层数据库结构的同时维护用户应用程序。
什么说如果数据库结构发生变化,用户什么都不会改变?
好吧,数据库结构可能会因多种原因而改变。在高层次上,我看到了两种可能性:
@1:在这种情况下,DBA 决定更改某些结构以提高性能或......在这种情况下,额外的层,例如使用存储过程、视图等,可以帮助“隐藏”对应用程序/用户的更改. 或者应用程序端的良好数据层可能会有所帮助。
@2:如果外部世界发生变化,或者您的业务规则发生变化,您在数据库级别上做的任何事情都无法让用户远离。例如,一家在数据库中一直只使用一种货币的公司突然走向国际化:在这种情况下,您的数据库必须被采用以支持多种货币,并且需要对数据库和用户进行重大更改。
例如,我有关系 R(并创建了使用此关系的应用程序),数据库管理员打算将 R 分解为 R1 和 R2。如何为最终用户确保应用程序的不可更改性?
管理员应该创建一个视图来表示R1
和R2
作为原始R
.