* = PK @ = FK ^ = Unique company database Jim's notes and business rules: EID is renamed employeeId. SIN is renamed SSN. Age is a bad idea, use DOB instead (birthdate) An address is composed of address1, address2, city, state, zipcode streetnumber apt or po Employees are assigned an 8 digit employee number, department ( departmentId*, name, location, managerId[employeeId]@ ) == or -- employeeId[comment:Department manager] project ( projectId*, name, budget, departmentId@ ) employee ( employeeId*, firstName, lastName, employeeNumber^, SSN^, address1, address2, city, state, zipcode, birthdate, departmentId@, supervisorId[employeeId]@ ) employeedependent ( employeedependentId*, employeeId@, name, DOB, relationship ) employeephone ( employeeId*@, phone* ) employeedegree ( employeeId*@, degreeId* ) employeesalary( employeeId*, jobName, salary, commission ) employee_project ( employeeId*@, projectId*@, startDate ) customer ( customerId*, CustName ) product ( productId* ) statezipcode ( zip, stateName ) degree ( degreeId*, degreeName^ ) order ( orderId*, customerId@, date ) No nulls in database requires: employee ( employeeId*, firstName, employeeNumber^, SSN^, address1, address2, city, state, zipcode, salary, birthdate, departmentId@, supervisorId[employeeId]@ ) employeelastname ( employeeId*, lastName ) To fix a null in a query SELECT SUM(salary) AS payroll SELECT SUM(Ifnull(salary,0) AS payroll