范式理论的程序设计(七)

关于数据库范式理论的程序设计 - NormalFormUtils这里我使用的工具类全部都是使用接口,public interface NormalFormUtils extends FcUtils 是关于范式的判定、分解的工具。这里要介绍的内容和代码都非常多Utils工具的继承关系NormalFormUtils接口import com.ruoxing.dbs.bean.Fu...
摘要由CSDN通过智能技术生成

关于数据库范式理论的程序设计 - NormalFormUtils

这里我使用的工具类全部都是使用接口,public interface NormalFormUtils extends FcUtils 是关于范式的判定、分解的工具。这里要介绍的内容和代码都非常多

Utils工具的继承关系

这里写图片描述

NormalFormUtils接口

这部分内容由于之前写的代码涉及到其他的内容,所以这里重写了几次,做了很多的删减,后面或许会再补充其他内容。

BCNF的判定

1. 算法描述
这里写图片描述

2. 算法代码

    /**
     * 描述:找到一个Ri中违反BCNF的函数依赖
     * @param fds 函数依赖集
     * @param attributeRi R分解后的Ri属性集
     * @return FunctionalDependency或者null
     */
    default FunctionalDependency violateBCNF(Collection<FunctionalDependency> fds, String attributeRi) {
        //(1)计算Ri中属性的每一个子集(即字符的组合) α,确保α+(在Pattern下的属性闭包)
        //计算Ri属性的所有子集
        final Collection<String> combinations = combination(attributeRi);
        for (CharSequence combination : combinations) {
            //计算α+
            final String closure = calcClosure(combination.toString(), fds);

            //(2)满足则Ri属于BCNF的条件
            //α+要么不含 (Ri-α)的任何属性
            final boolean empty = isEmpty(intersect(closure, except(attributeRi, combination)).toString());

            //要么包含Ri的所有属性
            final boolean contains = contains(closure, attributeRi);

            if (empty || contains) continue;
            //一定存在α → (α+ - α) ∩ Ri 违反BCNF
            final FunctionalDependency fd = new FunctionalDependency(combination, intersect(except(closure, combination), attributeRi));
            System.err.println("[" + attributeRi + "]中" + fd + "违反BCNF...................");
            return fd;
        }
        return null;
    }

BCNF的分解

1. 算法描述
如果直接将关系模式R按照该算法进行分解,那么该算法与计算F+没什么区别。所以该算法应该用于R分解为多个Ri后,如果有些Ri不满足BCNF再用该算法分解。后面会有利用正则覆盖Fc对R进行3NF分解,分解得到的多个Ri。如果要的到BCNF,这时候就可以使用该算法对这些Ri进行分解。
这里写图片描述

2. 算法代码

    /**
     * 描述:R分解为多个BCNF
     * @param fds 函数依赖F
     * @param attributeR R的属性集
     * @return Set<String> 满足BCNF的Ri.....
     */
    default Set<String> decomposeBCNF(Collection<Func
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值