From 90dfaa00f7df31a5ea250d547bd78a411bc55eae Mon Sep 17 00:00:00 2001 From: Benjamin Bengfort <benjamin@bengfort.com> Date: Thu, 28 Sep 2017 11:45:44 -0400 Subject: [PATCH] stringify things --- ...tional-Database-Design-Normalization.ipynb | 525 +++++++++--------- 1 file changed, 263 insertions(+), 262 deletions(-) diff --git a/jupyter/07-Relational-Database-Design-Normalization.ipynb b/jupyter/07-Relational-Database-Design-Normalization.ipynb index 073e104..6440f99 100644 --- a/jupyter/07-Relational-Database-Design-Normalization.ipynb +++ b/jupyter/07-Relational-Database-Design-Normalization.ipynb @@ -102,7 +102,7 @@ "text": [ "Tuples [1, 2, 3] and [2, 2, 3] violate the FD C -> A\n", "FD A -> B holds on this relation\n", - "FD A -> CB holds on this relation\n" + "FD A -> BC holds on this relation\n" ] } ], @@ -252,7 +252,9 @@ { "cell_type": "code", "execution_count": 9, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def findKeys(R, FClosure):\n", @@ -284,7 +286,9 @@ { "cell_type": "code", "execution_count": 10, - "metadata": {}, + "metadata": { + "collapsed": true + }, "outputs": [], "source": [ "def isInBCNF(R, FClosure, keys):\n", @@ -385,90 +389,90 @@ "name": "stdout", "output_type": "stream", "text": [ - "CB -> DA\n", - "CDA -> B\n", - "A -> B\n", - "CA -> CB\n", - "CB -> CA\n", - "DC -> CDB\n", - "CB -> A\n", - "D -> DBA\n", - "CBA -> DB\n", - "CDA -> CBA\n", - "CBA -> DAC\n", + "CA -> DBA\n", + "DC -> DCA\n", + "BCA -> DC\n", + "DC -> BCA\n", + "DC -> B\n", + "DC -> BCD\n", + "DC -> BDA\n", + "BCD -> DA\n", + "DC -> CA\n", + "CA -> DC\n", + "BC -> A\n", + "BCA -> DCA\n", + "DCA -> BCA\n", + "DC -> DA\n", + "BC -> BCA\n", + "BCA -> DBCA\n", "CA -> D\n", - "CDB -> A\n", - "DC -> CB\n", - "CB -> DC\n", - "CDA -> CDB\n", - "CDB -> CDA\n", + "D -> BA\n", + "BCA -> DBA\n", + "BC -> BA\n", + "BCD -> BACD\n", + "BC -> DC\n", + "DC -> BC\n", + "BC -> DBCA\n", + "BC -> DBA\n", + "DCA -> BAD\n", + "DC -> A\n", + "BCD -> BA\n", + "DCA -> BC\n", + "BC -> DCA\n", + "CA -> BC\n", + "BC -> CA\n", + "DC -> BD\n", + "BCD -> DCA\n", + "DCA -> BCD\n", + "BCD -> A\n", + "BC -> DA\n", + "BCD -> BCA\n", + "BCA -> DBC\n", + "BD -> BA\n", + "A -> BA\n", "CA -> DCA\n", - "CBA -> DBAC\n", - "D -> DA\n", - "DC -> B\n", - "CA -> CBA\n", - "DA -> BA\n", + "DC -> BDCA\n", + "BC -> DB\n", "CA -> DBCA\n", - "CD -> A\n", - "CBA -> DC\n", - "DC -> CBA\n", - "D -> BA\n", - "CDA -> BA\n", - "DC -> BA\n", - "CA -> DBA\n", - "DC -> DB\n", - "D -> DB\n", - "CB -> DBA\n", + "A -> B\n", "CA -> B\n", - "CB -> DB\n", - "CDA -> CDBA\n", - "CDB -> DA\n", - "D -> A\n", - "DC -> CDA\n", - "DB -> BA\n", - "CB -> CBA\n", - "CB -> DBCA\n", - "DA -> B\n", - "DA -> DB\n", - "DB -> DA\n", "CA -> BA\n", - "CD -> DA\n", - "CDA -> DBA\n", + "D -> DA\n", + "BD -> A\n", + "BCD -> BAD\n", + "CA -> BCA\n", + "BCA -> DA\n", + "DA -> BAD\n", + "BC -> DBC\n", + "BCA -> DB\n", + "DCA -> BACD\n", + "DCA -> BD\n", + "BC -> D\n", + "CA -> DA\n", + "DA -> BD\n", + "BD -> DA\n", "D -> B\n", - "CBA -> DBA\n", - "DB -> DBA\n", - "CDA -> DB\n", - "DBC -> CBA\n", - "CDB -> CA\n", - "CBA -> DBC\n", + "BCD -> CA\n", "CA -> DBC\n", - "DB -> A\n", + "DA -> BA\n", + "BD -> BAD\n", + "D -> BDA\n", + "DCA -> BA\n", + "DCA -> B\n", + "D -> BD\n", + "DA -> B\n", + "BCA -> D\n", + "D -> A\n", "CA -> DB\n", - "DC -> CDBA\n", - "CB -> BA\n", - "DA -> DBA\n", - "CB -> DBC\n", - "A -> BA\n", - "DC -> DBA\n", - "CBA -> D\n", - "DBC -> CDBA\n", - "DC -> CA\n", - "CA -> DC\n", - "CB -> D\n", - "CDB -> BA\n", - "CBA -> DA\n", - "CDB -> DBA\n", - "CA -> DA\n", - "CDA -> CB\n", - "CB -> CDA\n", + "DC -> BA\n", "Keys are:\n", - "DBC\n", - "CB\n", - "DC\n", - "CDBA\n", + "BCA\n", "CA\n", - "CBA\n", - "CDA\n" + "DC\n", + "BDCA\n", + "BC\n", + "DCA\n", + "BCD\n" ] } ], @@ -500,9 +504,9 @@ "output_type": "stream", "text": [ "Candidate Keys are:\n", - "CA\n", - "CB\n", - "DC\n" + "DC\n", + "BC\n", + "CA\n" ] } ], @@ -515,7 +519,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 15, "metadata": {}, "outputs": [ { @@ -523,7 +527,7 @@ "output_type": "stream", "text": [ "Checking if the schema is in BCNF\n", - "Decomposing using B -> C into relations CB and DBA\n" + "Decomposing using B -> C into relations BC and DBA\n" ] } ], @@ -538,7 +542,7 @@ }, { "cell_type": "code", - "execution_count": 17, + "execution_count": 16, "metadata": {}, "outputs": [ { @@ -547,12 +551,12 @@ "text": [ "-------------- Doing a full BCNF Decompisition -------\n", "ABCD is not in BCNF\n", - "Decomposing ABCD using A -> B into relations BA and CDA\n", + "Decomposing ABCD using A -> B into relations BA and DCA\n", "BA is in BCNF\n", - "CDA is not in BCNF\n", - "Decomposing CDA using D -> A into relations DA and CD\n", + "DCA is not in BCNF\n", + "Decomposing DCA using D -> A into relations DA and DC\n", "DA is in BCNF\n", - "CD is in BCNF\n", + "DC is in BCNF\n", "------------------------------------------------------\n" ] } @@ -573,7 +577,7 @@ }, { "cell_type": "code", - "execution_count": 18, + "execution_count": 17, "metadata": {}, "outputs": [ { @@ -585,17 +589,17 @@ "Checking if the schema is in BCNF\n", "-------------- NO: Doing a full BCNF Decompisition -------\n", "ABCDEH is not in BCNF\n", - "Decomposing ABCDEH using A -> B into relations BA and CADEH\n", - "BA is in BCNF\n", - "CADEH is not in BCNF\n", - "Decomposing CADEH using E -> A into relations EA and CDEH\n", - "EA is in BCNF\n", - "CDEH is not in BCNF\n", - "Decomposing CDEH using E -> H into relations EH and CDE\n", + "Decomposing ABCDEH using E -> H into relations EH and DECAB\n", "EH is in BCNF\n", - "CDE is not in BCNF\n", - "Decomposing CDE using E -> C into relations CE and DE\n", - "CE is in BCNF\n", + "DECAB is not in BCNF\n", + "Decomposing DECAB using A -> C into relations CA and DEBA\n", + "CA is in BCNF\n", + "DEBA is not in BCNF\n", + "Decomposing DEBA using E -> A into relations EA and DEB\n", + "EA is in BCNF\n", + "DEB is not in BCNF\n", + "Decomposing DEB using E -> B into relations BE and DE\n", + "BE is in BCNF\n", "DE is in BCNF\n", "------------------------------------------------------\n" ] @@ -629,7 +633,7 @@ }, { "cell_type": "code", - "execution_count": 19, + "execution_count": 18, "metadata": {}, "outputs": [ { @@ -637,9 +641,9 @@ "output_type": "stream", "text": [ "JKL is not in BCNF\n", - "Decomposing JKL using L -> K into relations KL and JL\n", + "Decomposing JKL using L -> K into relations KL and LJ\n", "KL is in BCNF\n", - "JL is in BCNF\n" + "LJ is in BCNF\n" ] } ], @@ -649,162 +653,164 @@ }, { "cell_type": "code", - "execution_count": 20, - "metadata": {}, + "execution_count": 24, + "metadata": { + "scrolled": false + }, "outputs": [ { "data": { "text/plain": [ - "{<__main__.FD at 0x10ccafa58>,\n", - " <__main__.FD at 0x10caee9e8>,\n", - " <__main__.FD at 0x10cb01828>,\n", - " <__main__.FD at 0x10caeec50>,\n", - " <__main__.FD at 0x10cca8b00>,\n", - " <__main__.FD at 0x10ccaf518>,\n", - " <__main__.FD at 0x10cc9a780>,\n", - " <__main__.FD at 0x10cc92fd0>,\n", - " <__main__.FD at 0x10ccaf438>,\n", - " <__main__.FD at 0x10ccaf048>,\n", - " <__main__.FD at 0x10cca8630>,\n", - " <__main__.FD at 0x10ccaf5c0>,\n", - " <__main__.FD at 0x10ccafe48>,\n", - " <__main__.FD at 0x10cc92b70>,\n", - " <__main__.FD at 0x10cc9a4a8>,\n", - " <__main__.FD at 0x10cb07198>,\n", - " <__main__.FD at 0x10cc922e8>,\n", - " <__main__.FD at 0x10ccaf6a0>,\n", - " <__main__.FD at 0x10caee860>,\n", - " <__main__.FD at 0x10ccaf6d8>,\n", - " <__main__.FD at 0x10ccaf390>,\n", - " <__main__.FD at 0x10ccaf208>,\n", - " <__main__.FD at 0x10cca87b8>,\n", - " <__main__.FD at 0x10ccaf2b0>,\n", - " <__main__.FD at 0x10cc92940>,\n", - " <__main__.FD at 0x10cc92f28>,\n", - " <__main__.FD at 0x10cc6b860>,\n", - " <__main__.FD at 0x10cca8f98>,\n", - " <__main__.FD at 0x10ccaf780>,\n", - " <__main__.FD at 0x10ccc90f0>,\n", - " <__main__.FD at 0x10cc9a390>,\n", - " <__main__.FD at 0x10cc92a58>,\n", - " <__main__.FD at 0x10ccaf160>,\n", - " <__main__.FD at 0x10cc9a978>,\n", - " <__main__.FD at 0x10ccaf4e0>,\n", - " <__main__.FD at 0x10ccaf1d0>,\n", - " <__main__.FD at 0x10cb01d30>,\n", - " <__main__.FD at 0x10cc9a630>,\n", - " <__main__.FD at 0x10cc9a320>,\n", - " <__main__.FD at 0x10ccaf550>,\n", - " <__main__.FD at 0x10ccaf3c8>,\n", - " <__main__.FD at 0x10caee630>,\n", - " <__main__.FD at 0x10cb01438>,\n", - " <__main__.FD at 0x10ccaf748>,\n", - " <__main__.FD at 0x10cb01cc0>,\n", - " <__main__.FD at 0x10cca8dd8>,\n", - " <__main__.FD at 0x10cc9a9b0>,\n", - " <__main__.FD at 0x10cc9a198>,\n", - " <__main__.FD at 0x10ccc9128>,\n", - " <__main__.FD at 0x10cb01c18>,\n", - " <__main__.FD at 0x10cc92dd8>,\n", - " <__main__.FD at 0x10cc9ae10>,\n", - " <__main__.FD at 0x10ccaf5f8>,\n", - " <__main__.FD at 0x10ccafda0>,\n", - " <__main__.FD at 0x10cb07438>,\n", - " <__main__.FD at 0x10ccaf4a8>,\n", - " <__main__.FD at 0x10cc9a710>,\n", - " <__main__.FD at 0x10cc9a898>,\n", - " <__main__.FD at 0x10cb070f0>,\n", - " <__main__.FD at 0x10ccc9160>,\n", - " <__main__.FD at 0x10cc9ae80>,\n", - " <__main__.FD at 0x10ccaf400>,\n", - " <__main__.FD at 0x10ccaf080>,\n", - " <__main__.FD at 0x10cc92b38>,\n", - " <__main__.FD at 0x10ccc92e8>,\n", - " <__main__.FD at 0x10cc9afd0>,\n", - " <__main__.FD at 0x10ccaf0b8>,\n", - " <__main__.FD at 0x10cc9ab70>,\n", - " <__main__.FD at 0x10cca82e8>,\n", - " <__main__.FD at 0x10cc92978>,\n", - " <__main__.FD at 0x10cc9a2b0>,\n", - " <__main__.FD at 0x10cc6b9b0>,\n", - " <__main__.FD at 0x10cca8f60>,\n", - " <__main__.FD at 0x10ccaf198>,\n", - " <__main__.FD at 0x10cb01ac8>,\n", - " <__main__.FD at 0x10ccaf320>,\n", - " <__main__.FD at 0x10ccaf710>,\n", - " <__main__.FD at 0x10cc9a400>,\n", - " <__main__.FD at 0x10cc9af28>,\n", - " <__main__.FD at 0x10cc9a358>,\n", - " <__main__.FD at 0x10caeeeb8>,\n", - " <__main__.FD at 0x10ccaf470>,\n", - " <__main__.FD at 0x10cc9abe0>,\n", - " <__main__.FD at 0x10cca8588>,\n", - " <__main__.FD at 0x10ccc9358>,\n", - " <__main__.FD at 0x10cca8128>,\n", - " <__main__.FD at 0x10caeef98>,\n", - " <__main__.FD at 0x10cc92588>,\n", - " <__main__.FD at 0x10cc9aeb8>,\n", - " <__main__.FD at 0x10ccaf0f0>,\n", - " <__main__.FD at 0x10ccaf358>,\n", - " <__main__.FD at 0x10cc9a7f0>,\n", - " <__main__.FD at 0x10ccaf7b8>,\n", - " <__main__.FD at 0x10cc92710>,\n", - " <__main__.FD at 0x10cc92ef0>,\n", - " <__main__.FD at 0x10cb074a8>,\n", - " <__main__.FD at 0x10cb015f8>,\n", - " <__main__.FD at 0x10cc9a0f0>,\n", - " <__main__.FD at 0x10ccaf240>,\n", - " <__main__.FD at 0x10cc92080>,\n", - " <__main__.FD at 0x10ccaf668>,\n", - " <__main__.FD at 0x10cc9ad68>,\n", - " <__main__.FD at 0x10cb07048>,\n", - " <__main__.FD at 0x10cc9ad30>,\n", - " <__main__.FD at 0x10cca86d8>,\n", - " <__main__.FD at 0x10cc92208>,\n", - " <__main__.FD at 0x10caee668>,\n", - " <__main__.FD at 0x10cca8e80>,\n", - " <__main__.FD at 0x10caee940>,\n", - " <__main__.FD at 0x10cc9a5f8>,\n", - " <__main__.FD at 0x10cc9a3c8>,\n", - " <__main__.FD at 0x10cb01e48>,\n", - " <__main__.FD at 0x10cb07390>,\n", - " <__main__.FD at 0x10cb01da0>,\n", - " <__main__.FD at 0x10cca8a90>,\n", - " <__main__.FD at 0x10ccaf630>,\n", - " <__main__.FD at 0x10caee898>,\n", - " <__main__.FD at 0x10cc9a470>,\n", - " <__main__.FD at 0x10cc9af98>,\n", - " <__main__.FD at 0x10cc9aac8>,\n", - " <__main__.FD at 0x10cc92c50>,\n", - " <__main__.FD at 0x10cb019b0>,\n", - " <__main__.FD at 0x10caee780>,\n", - " <__main__.FD at 0x10cb072e8>,\n", - " <__main__.FD at 0x10caeeef0>,\n", - " <__main__.FD at 0x10cc9a908>,\n", - " <__main__.FD at 0x10cc9a9e8>,\n", - " <__main__.FD at 0x10cb01668>,\n", - " <__main__.FD at 0x10cc6be48>,\n", - " <__main__.FD at 0x10cb01080>,\n", - " <__main__.FD at 0x10ccaf128>,\n", - " <__main__.FD at 0x10cca8e10>,\n", - " <__main__.FD at 0x10cc9aef0>,\n", - " <__main__.FD at 0x10cc92e80>,\n", - " <__main__.FD at 0x10ccaf2e8>,\n", - " <__main__.FD at 0x10cca8d30>,\n", - " <__main__.FD at 0x10ccc9198>,\n", - " <__main__.FD at 0x10ccaf588>,\n", - " <__main__.FD at 0x10cb07470>,\n", - " <__main__.FD at 0x10ccafa20>,\n", - " <__main__.FD at 0x10cc9a8d0>}" + "{'A -> A',\n", + " 'A -> B',\n", + " 'A -> BA',\n", + " 'B -> B',\n", + " 'BA -> A',\n", + " 'BA -> B',\n", + " 'BA -> BA',\n", + " 'BC -> A',\n", + " 'BC -> B',\n", + " 'BC -> BA',\n", + " 'BC -> BC',\n", + " 'BC -> BCA',\n", + " 'BC -> C',\n", + " 'BC -> CA',\n", + " 'BC -> D',\n", + " 'BC -> DA',\n", + " 'BC -> DB',\n", + " 'BC -> DBA',\n", + " 'BC -> DBC',\n", + " 'BC -> DBCA',\n", + " 'BC -> DC',\n", + " 'BC -> DCA',\n", + " 'BCA -> A',\n", + " 'BCA -> B',\n", + " 'BCA -> BA',\n", + " 'BCA -> BC',\n", + " 'BCA -> BCA',\n", + " 'BCA -> C',\n", + " 'BCA -> CA',\n", + " 'BCA -> D',\n", + " 'BCA -> DA',\n", + " 'BCA -> DB',\n", + " 'BCA -> DBA',\n", + " 'BCA -> DBC',\n", + " 'BCA -> DBCA',\n", + " 'BCA -> DC',\n", + " 'BCA -> DCA',\n", + " 'BCD -> A',\n", + " 'BCD -> B',\n", + " 'BCD -> BA',\n", + " 'BCD -> BACD',\n", + " 'BCD -> BAD',\n", + " 'BCD -> BC',\n", + " 'BCD -> BCA',\n", + " 'BCD -> BCD',\n", + " 'BCD -> BD',\n", + " 'BCD -> C',\n", + " 'BCD -> CA',\n", + " 'BCD -> D',\n", + " 'BCD -> DA',\n", + " 'BCD -> DC',\n", + " 'BCD -> DCA',\n", + " 'BD -> A',\n", + " 'BD -> B',\n", + " 'BD -> BA',\n", + " 'BD -> BAD',\n", + " 'BD -> BD',\n", + " 'BD -> D',\n", + " 'BD -> DA',\n", + " 'BDA -> A',\n", + " 'BDA -> B',\n", + " 'BDA -> BA',\n", + " 'BDA -> BD',\n", + " 'BDA -> BDA',\n", + " 'BDA -> D',\n", + " 'BDA -> DA',\n", + " 'BDCA -> A',\n", + " 'BDCA -> B',\n", + " 'BDCA -> BA',\n", + " 'BDCA -> BC',\n", + " 'BDCA -> BCA',\n", + " 'BDCA -> BCD',\n", + " 'BDCA -> BD',\n", + " 'BDCA -> BDA',\n", + " 'BDCA -> BDCA',\n", + " 'BDCA -> C',\n", + " 'BDCA -> CA',\n", + " 'BDCA -> D',\n", + " 'BDCA -> DA',\n", + " 'BDCA -> DC',\n", + " 'BDCA -> DCA',\n", + " 'C -> C',\n", + " 'CA -> A',\n", + " 'CA -> B',\n", + " 'CA -> BA',\n", + " 'CA -> BC',\n", + " 'CA -> BCA',\n", + " 'CA -> C',\n", + " 'CA -> CA',\n", + " 'CA -> D',\n", + " 'CA -> DA',\n", + " 'CA -> DB',\n", + " 'CA -> DBA',\n", + " 'CA -> DBC',\n", + " 'CA -> DBCA',\n", + " 'CA -> DC',\n", + " 'CA -> DCA',\n", + " 'D -> A',\n", + " 'D -> B',\n", + " 'D -> BA',\n", + " 'D -> BD',\n", + " 'D -> BDA',\n", + " 'D -> D',\n", + " 'D -> DA',\n", + " 'DA -> A',\n", + " 'DA -> B',\n", + " 'DA -> BA',\n", + " 'DA -> BAD',\n", + " 'DA -> BD',\n", + " 'DA -> D',\n", + " 'DA -> DA',\n", + " 'DC -> A',\n", + " 'DC -> B',\n", + " 'DC -> BA',\n", + " 'DC -> BC',\n", + " 'DC -> BCA',\n", + " 'DC -> BCD',\n", + " 'DC -> BD',\n", + " 'DC -> BDA',\n", + " 'DC -> BDCA',\n", + " 'DC -> C',\n", + " 'DC -> CA',\n", + " 'DC -> D',\n", + " 'DC -> DA',\n", + " 'DC -> DC',\n", + " 'DC -> DCA',\n", + " 'DCA -> A',\n", + " 'DCA -> B',\n", + " 'DCA -> BA',\n", + " 'DCA -> BACD',\n", + " 'DCA -> BAD',\n", + " 'DCA -> BC',\n", + " 'DCA -> BCA',\n", + " 'DCA -> BCD',\n", + " 'DCA -> BD',\n", + " 'DCA -> C',\n", + " 'DCA -> CA',\n", + " 'DCA -> D',\n", + " 'DCA -> DA',\n", + " 'DCA -> DC',\n", + " 'DCA -> DCA'}" ] }, - "execution_count": 20, + "execution_count": 24, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "Fclosure" + "{str(f) for f in Fclosure}" ] }, { @@ -829,44 +835,39 @@ }, { "cell_type": "code", - "execution_count": 22, + "execution_count": 25, "metadata": {}, "outputs": [ { "data": { "text/plain": [ - "{<__main__.FD at 0x10cb01828>,\n", - " <__main__.FD at 0x10cb01ac8>,\n", - " <__main__.FD at 0x10cb01080>}" + "{'A -> B', 'BC -> D', 'D -> A'}" ] }, - "execution_count": 22, + "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ - "F" + "{str(f) for f in F}" ] }, { "cell_type": "code", - "execution_count": 24, + "execution_count": 26, "metadata": {}, "outputs": [ { - "data": { - "text/plain": [ - "<__main__.FD at 0x10cb010b8>" - ] - }, - "execution_count": 24, - "metadata": {}, - "output_type": "execute_result" + "name": "stdout", + "output_type": "stream", + "text": [ + "A -> B\n" + ] } ], "source": [ - "FD('A', 'B')" + "print(FD('A', 'B'))" ] } ], -- GitLab