A family of Microsoft relational database management systems designed for ease of use.
Use a small set of subject-based tables and relate them, instead of one table per “type” or per attribute.
A high-level structure that fits this scenario:
- People table (one row per person)
- PersonID (AutoNumber, primary key)
- FirstName
- LastName
- PersonType (e.g., Lawyer, Accountant, etc., or a foreign key to a PersonTypes table)
- FirmID (foreign key to Firms table, if applicable)
- Other core attributes that apply to all people
- Firms (Companies) table
- FirmID (AutoNumber, primary key)
- FirmName
- MainPhone
- Website
- Other firm-level attributes
- FirmLocations table (if firms have multiple offices)
- LocationID (AutoNumber, primary key)
- FirmID (foreign key to Firms)
- Address1, Address2, City, State, PostalCode, Country
- LocationPhone
- PersonContactMethods table (to support multiple phone numbers, emails, etc.)
- ContactID (AutoNumber, primary key)
- PersonID (foreign key to People)
- ContactType (e.g., Mobile, Office, Home, Email)
- ContactValue (e.g., phone number or email address)
- Assistants table (self-relationship between people)
- AssistantID (AutoNumber, primary key)
- PersonID (the main person; foreign key to People)
- AssistantPersonID (the assistant; foreign key to People)
- AssistantRole / Notes
- Projects table
- ProjectID (AutoNumber, primary key)
- ProjectName
- Description
- Other project attributes
- ProjectPeople (junction) table (many-to-many between People and Projects)
- ProjectID (foreign key to Projects)
- PersonID (foreign key to People)
- RoleOnProject (e.g., Lead Lawyer, Accountant, etc.)
- Composite primary key on (ProjectID, PersonID) or a separate AutoNumber key.
Key design principles from Access relational design:
- Each table should store data about one subject (people, firms, locations, projects, etc.), not about a specific “type” of person. This avoids many small, overlapping tables.
- Use an AutoNumber primary key in each main table (e.g., PersonID, FirmID, ProjectID) as a unique identifier.
- Use foreign keys in related tables to connect data. For example, FirmID in People links a person to a firm; PersonID in PersonContactMethods links multiple contact methods to one person.
- Use one-to-many relationships for repeating attributes:
- One person → many contact methods
- One firm → many locations
- One person → many assistants (via a self-referencing table)
- Use a many-to-many relationship for people on projects, implemented via a junction table (ProjectPeople).
This approach keeps the number of tables manageable and uses relationships (primary key ↔ foreign key) to tie the data together instead of creating a separate table for each person type or each attribute.
References: