{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "활동 6a\n", "------------\n", "\n", "이번 활동의 목표는 지난 시간의 도구를 사용하여 BCNF 를 분해하고 그 과정을 이해 해보는 것이다. \n", "\n", "먼저, 도구와 샘플 데이터를 불러와야 한다. " ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from closure_v2 import compute_closure, display_side_by_side, print_setup # python2 인 경우\n", "from closure_v3 import compute_closure, display_side_by_side, print_setup # python3 인 경우" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "'Connected: @None'" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%load_ext sql\n", "%sql sqlite://" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " * sqlite://\n", "Done.\n", "Done.\n", "1 rows affected.\n", "1 rows affected.\n", "1 rows affected.\n" ] }, { "data": { "text/plain": [ "[]" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "%%sql DROP TABLE IF EXISTS T;\n", "CREATE TABLE T(course VARCHAR, classroom INT, time INT);\n", "INSERT INTO T VALUES ('CS 364', 132, 900);\n", "INSERT INTO T VALUES ('CS 245', 140, 1000);\n", "INSERT INTO T VALUES ('EE 101', 210, 900);" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 문제 1\n", "\n", "먼저, `T`를 BCNF 형태로 분해해보자. `compute_closure` 함수를 사용하여 BCNF 알고리즘의 각 단계를 따라가보자. 그리고 테이블을 분해해 BCNF 정규화를 따르도록 새로운 테이블을 만들어 보자(새로운 SQL 테이블을 생성해야 한다):\n", "\n", "제공되는 도구에 `display_side_by_side`라는 함수를 쓰면 예쁜 표를 만들 수 있다!" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " * sqlite://\n", "Done.\n" ] }, { "data": { "text/html": [ "
course | \n", "classroom | \n", "time | \n", "
---|---|---|
CS 364 | \n", "132 | \n", "900 | \n", "
CS 245 | \n", "140 | \n", "1000 | \n", "
EE 101 | \n", "210 | \n", "900 | \n", "