属性集闭包的计算,是数据库设计中绕不开的一步。关系模式一上来,先别急着建表,先看看它的函数依赖写得靠不靠谱。属性集闭包这个东西,说白了,就是给你一组属性,让你看看它到底能推出哪些别的属性。嗯,有点像从钥匙猜能开哪几个门,挺直观的对吧?
X+的求法其实也不难:初始给个集合 X,反复把能推出的新属性加进去,直到加不动为止。就像泡方便面一样,水一倒下去,面自然就开花了——关键是水要对,时间要够。你要是写代码模拟,也就一层循环的事。
这个算法好用的地方在于,你不用把所有函数依赖都列出来(那太吓人了),你只要关心某个属性子集能推出什么就行。比如你在做候选码判断、范式设计时,这一招就派上用场了。配合下文里讲的那些链接,比如函数依赖闭包,还能挖出不少细节。
如果你平时做数据库范式设计做得多,或者在写表结构时对依赖关系比较敏感,推荐你把这个算法写成一个小工具,配合 IDE 一起用,效率会高不少。哦对了,X+
虽然不是万能钥匙,但用好了,能省你不少脑细胞。