Your program will generate SQL code based on the input table and columns.
1. Input: a plain SQL table, with a potential PK given as parameter. That is, assume you imported a CSV or text file without assurance the table has a valid PK. In this specific HW edition the table will not have nulls.
2. PK: you must verify if the table PK is indeed valid. The PK can be composite and can have up 2 to attributes. You are not expected to find a PK if the given PK is invalid. In this specific HW edition the PK will not have nulls.
3. FDs: your program must compute all potential functional dependencies considering the max number of columns in the PK and nonkey columns. For FDs not involving the PK there must exist at least two repetitions. In other words, you need to eliminate potential candidate keys from consideration since they do not cause update anomalies.
4. Normalization: Your program must check 1NF, 2NF, 3NF, BCNF. If the table is not in BCNF then you have to iteratively normalize it up to BCNF. For 3NF/BCNF assume the key on the LHS has only one attribute.
5. Goal: validate PK (remember it can be composite with 2 columns), certify if the input table, with potential PK (input parameter), check if there are repeated rows (1NF, all values are assumed atomic in SQL) and nonkey columns obeys each higher normal form: 2NF, 3NF, BCNF. A table may be in 1NF with an invalid PK given as parameter.
6. Optional: the program must iteratively decompose the input table produce a final set of normal- ized tables, satisfying 3NF or BCNF if possible. Each table must satisfy the properties explained in the textbook. Extra credit= 20 points, which can be applied towards HW1.
7. Excluded: referential integrity. In this HW you do not have to worry about inconsistent or missing information across tables.