I use the following checklist to guide me through each step of a user-schema evaluation. You can make this part of your own bag of tools if you like.
- Set the context—I get a high-level understanding of what the database is about by reviewing the physical, external, and logical layers of the database environment.
- Create a physical design—I create a physical model of the database, either by using the SQL Server diagram function or by reverse-engineering the database with a CASE tool.
- List ambiguous tables—I make a list of tables that have an unclear purpose or ambiguous names. I clarify why they're in the database because some might be work or temporary tables that are left over from previous operations.
- Find hidden arrays—I look for hidden arrays (lists of values contained in a table). A table that contains a list of values is prefirst normal form (1NF) or unnormalized. I make a note to decompose that table into third normal form (3NF).
- List ambiguous field names—I look for fields that have ambiguous names. I find out what the fields are and what they mean. You can't properly determine a database's normalization level without looking at the data and understanding what it means.
- Look for dirty data—I look for incomplete or incorrect data so that it doesn't distract me.
- Locate redundancy across tables—I locate metadata redundancy across tables. I resolve such redundancies by removing all but one instance of duplicate attributes or by renaming attributes to make them more meaningful and accurate.
- Find transitive dependencies within tables—I analyze each table for a transitive dependency (the existence of second normal form—2NF—data). If one or more transitive dependencies exist in a table, I make a note to decompose that table into 3NF.
- Identify less-than-full functional dependency—If a table has less-than-full functional dependency (existence of 1NF data), I make a note to decompose that table into 3NF.
- Propose database changes—I propose the list of changes to the database and get the client's approval to make the changes. Then, I check with the DBA to arrange a time to make the changes.
- Design views that support existing applications—I list the views, either materialized or regular, that I need to build to support applications that were written against under- or overnormalized data.
- Implement the changes—I implement the architectural changes to the database and create the compensating views.
- Monitor performance—After I've completed the restructuring, I work with the DBA to measure performance. If a problem still exists, I suggest that the client move to more powerful hardware and a greater-bandwidth network.
0 comments
Hide comments