import sqlite3
conn = sqlite3.connect(':memory:')
cur = conn.cursor()
# Original table with multivalued dependencies
cur.execute('''
CREATE TABLE StudentActivities (
Student TEXT,
Hobby TEXT,
Subject TEXT
)''')
# Insert data showing multivalued dependencies
cur.execute("INSERT INTO StudentActivities VALUES ('Alice', 'Chess', 'Math')")
cur.execute("INSERT INTO StudentActivities VALUES ('Alice', 'Chess', 'Science')")
cur.execute("INSERT INTO StudentActivities VALUES ('Alice', 'Soccer', 'Math')")
cur.execute("INSERT INTO StudentActivities VALUES ('Alice', 'Soccer', 'Science')")
# Decompose into two tables to achieve 4NF
cur.execute('''
CREATE TABLE StudentHobbies (
Student TEXT,
Hobby TEXT
)''')
cur.execute('''
CREATE TABLE StudentSubjects (
Student TEXT,
Subject TEXT
)''')
# Insert decomposed data
cur.execute("INSERT INTO StudentHobbies VALUES ('Alice', 'Chess')")
cur.execute("INSERT INTO StudentHobbies VALUES ('Alice', 'Soccer')")
cur.execute("INSERT INTO StudentSubjects VALUES ('Alice', 'Math')")
cur.execute("INSERT INTO StudentSubjects VALUES ('Alice', 'Science')")
# Query decomposed tables
print('StudentHobbies:')
for row in cur.execute('SELECT * FROM StudentHobbies'):
print(row)
print('\nStudentSubjects:')
for row in cur.execute('SELECT * FROM StudentSubjects'):
print(row)
conn.close()