【问题标题】:DB normalization and subqueries数据库规范化和子查询
【发布时间】:2011-10-07 05:18:48
【问题描述】:

我正在学习数据库课程,我有几个关于计算问题的问题。非常感谢任何见解。

首先,我听说“没有算法”可以将关系转换为既无损又保留依赖关系的 BCNF。这样做的原因是,对于某些关系,BCNF 中不存在具有所需属性的关系。我发现这具有误导性,因为您可以说没有算法可以使用相同的逻辑找到二次方程的两个实解。当然你不能......但是对于规范化问题,我认为应该可以确定是否存在具有两个属性(决策问题)的 BCNF 转换,如果决策问题发出“是”,那么算法计算等效的 BCNF 表示。我的想法是对的,还是我说的有错?

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

【问题讨论】:

    标签: sql database normalization


    【解决方案1】:

    1 - 据我所知,没有任何一种算法可以确定关系是否可以在保留其属性的同时转换为 BCNF。但是,您可以组合现有的也可以达到您想要的效果。

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

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

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

    【讨论】:

    • 谢谢。对于第一个,我认为存在有限数量的不同的、有意义的分解......所以一种算法是生成它们并检查它们。对于第二个......我们同意有一些查询可以消除子查询。不过,是否有一些事情只能通过子查询来完成?
    猜你喜欢
    • 2012-12-25
    • 2011-11-15
    • 2011-09-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多