2011-07-17 74 views
0

我正在学习数据库课程,我有几个关于计算问题的问题。任何见解都非常感谢。数据库规范化和子查询

首先,我听到它抛出了“没有算法”来将关系转换为无损和依赖保持的BCNF。其原因是,对于某些关系,BCNF中不存在与期望属性的关系。我觉得这是误导,因为你可以说没有算法用相同的逻辑找到二次方程的两个实数解。当然,你不能...但是对于归一化问题,我认为应该有可能确定是否存在具有两个属性(决策问题)的BCNF变换,并且如果决策问题发出“是”,则应该有算法计算一个等效的BCNF表示。我的思想是正确的,还是我说过的错误?

我的第二个问题关于子查询。 SQL中涉及子查询的任何查询都可以在没有子查询的情况下重写吗?我知道这不是很好 - 我想我们坚持基本的SQL(大多数/所有系统共享)并限制子查询选择从属于顶层的语句(允许顶层集操作) 。

回答

0

1 - 据我所知,没有任何单一的算法来确定关系是否可以转换为BCNF,同时保留其属性。但是,你可以结合现有的也实现你想要的。

使用关系分解算法,可以分解你的关系,然后检查它的依赖关系。如果它的依赖关系保留了你的结果,否则你可以回溯你的步骤并返回关系的原始状态。

我知道它不是你想要的答案,但可以用作解决方案。

2 - 如果您的意思是嵌套查询,是的,涉及子查询的某些查询可以在不使用子查询的情况下编写。

+0

感谢您的支持。对于第一个,我想有一个有限数量的不同的,有意义的分解......所以一个算法将生成它们并检查它们。对于第二个...我们同意有一些查询可以消除子查询。但是,有些事情只能通过子查询完成吗? – Patrick87