Vittles
I will assume you have the fundamentals...
Fundamentals of Relational Database Design by Paul Litwin
Download document from Jeramy's site
Read on-line (HTML) at Rudy's site
Micro$oft's answer...
Where to find information about designing a database in Microsoft Access
283878 - Description of the database normalization basics
304467 - ACC2000 Defining Relationships Between Tables in a Microsoft Access Database
Using relastionships where the related table contains added information is a must. For example, Invoice header and Invoice detail, Family and Family members. Here, you definitely should use different tables.
Using relationships where the related table contains no added value is debateable. For example, you want to rate support calls by importance (urgent, medium and low priority), or indicate the terms of an invoice (30 days, 7 days, immediate). Here, the variable is used for ranking / sorting the main record.
Having a table for this specific type of issue -- you want to have the end user select a specific item (terms on an invoice, urgency on a support call) where the selected item serves no other purpose, then using different tables for each relationship may seem wasteful, may seem to create too much overhead, etc. There must be another way...
You can create a "value list" for the combo or list box used on the form. A common approach, easy to implement. Downside is that you may have some maintenance of adding more items to the list. This can be done automatically through code. Another issue is that what do you do if you accept data from more than one place? You have to duplicate the efforts for one combo box and the other, and may have to ensure the lists are identicle.
My personal approach, and I have only seen this approach referenced in two other locations is to use one table for storing this type of variable - only.
Table format is...
tblGetVar
GetVarType - text, about 15 characters
GetVarCode - text, about 15 characters
GetVarDate - date field was last updated
Description - text, 255 char
Primary key = GetVarType + GetVarCode
Sample data...
[tt]
tblGetVar
GetVarType GetVarCode
InvTerm 30 days
InvTerm 10 days
InvTerm Immediate
CallUrgency 1 Emergency
CallUrgency 2 High Priority
CallUrgency 3 Med Priority
CallUrgency 4 Low Priority
CallUrgency 5 No priority
[/tt]
I query the GetVarType to display the acceptable values for the combo or list box. The query can be run from any form.
I then standardized my approach so that I use a centralized module that displays the (filterd or unfiltered) records, allows / disallows edits, and looks after the maintenance (ie, GetVarType set correctly).
The code is so portable that I copy it from project to project with little effort -- saves oddles of time.
Richard