Access Database Design

Posted on 2012-04-12
Last Modified: 2012-04-12
I am redesigning an Access database system and could use some advice.  

Currently I have multiple self-contained databases being filled out by users at various locations.  Monthly I import records from each database into a Master database.  [I'm not able to setup and connect everyone to a shared MDB or SQL database.]  This is working out fine.

However, each database has lookup tables that I wish to now update frequently and distribute to everyone.  I was going to put all reference tables into a separate database, link these reference tables to the "input" database - so I could easily distribute a new reference database without having to go into each person's input database and change things.

My problem is that I can't set referential integrity to linked tables and I want to control what is entered into fields using these lookup tables.

Any suggestions?

- Methos
Question by:Methos
LVL 77

Assisted Solution

peter57r earned 250 total points
ID: 37838863
Provided all the user input is through your forms - so that there is no way they can enter data directly into tables or via queries - then you should not have a problem.  I assume you have suitable validation and other control mechanisms in your forms that prevent invalid data being entered.

I would say that the solution you are proposing is very sensible.
LVL 74

Accepted Solution

Jeffrey Coachman earned 250 total points
ID: 37838871
For "Lookups" referential integrity may not always be needed.
In some cases the users are/were allowed to type in "Free Text"
(Set the "LimitToList" property of the combobox to: No)

This means that the existing data may not be in your "revised" list, thus RI cannot be enforced.
Again, this is sometimes to be expected.
There is nothing inherently "wrong" with this (Unwieldy, yes, ...but not wrong)

You can however get a unique list from the existing data though, and verify this list against your "official" list.
For example this will get a unique list of Departments from a "Orders" table
FROM Orders




Author Closing Comment

ID: 37838976
Thanks to both of you.  I do use input forms, but haven't really stopped anyone from getting at the tables - which I'll set in motion now.   I also left the combo box property left at not limiting to the list, which I'll change.

Both answers helped me equally...  I split the points but can't pick both as "best solution".

Thanks -- I can move forward.  I appreciate you quick answers back!
LVL 21
ID: 37839050
<<My problem is that I can't set referential integrity to linked tables and I want to control what is entered into fields using these lookup tables.>>

It is true the data engine can't enforce referential integrity across databases. That does not mean that you can't write code that does. Before RDBMS's could enforce RI, I have to write code to do it.  As JeffCoachman poited out there are times when you do not what the RDMS/database engine to enforce RI.  I have apps where I enforce the RI with code not the RDMS/database engine.

When trying to keep remove sits in sync, you have to be very careful about deleting anything from your master tables. It is easy to add data to your master tables.

Back in the mod 90's I have a client with offices in many states.  The remote office were set up to create an export databases that was then FTP'ed to the main office.  The app also looked for updates on the FTP site. It would download the updater database and open it. It would auto run and update the master list tables.  This allowed me to use a single back end oat each location.   I also never delete records. Only mark then as inactive.  To delete records from master list, you will first need to update all the existing data so it is not linked to the record that will be deleted.     They still use this method toady.

My recommendation is to never delete records. Only mark then as inactive. You can easily filter out these records.

FWIW: I was fortunate to have learned never to delete records from the very start from some DBA masters. I have been doing it this with every application for 30+ years and it has served me well.

EDIT: Well ...  I took to long to type my reply.  Hope it helps anyway.

Featured Post

Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

Join & Write a Comment

This article is a continuation or rather an extension from Cascading Combos ( and builds on examples developed in detail there. It should be understandable alone, but I recommend reading the previous artic…
When you are entering numbers in a speadsheet, and don't remember what 6×7 is, you just type “=6*7" instead. It works in every cell! This is not so in Access. To enter the elusive 42 in a text box, you have to find a calculator, and then copy the re…
Familiarize people with the process of retrieving data from SQL Server using an Access pass-thru query. Microsoft Access is a very powerful client/server development tool. One of the ways that you can retrieve data from a SQL Server is by using a pa…
Using Microsoft Access, learn some simple rules for how to construct tables in a relational database. Split up all multi-value fields into single values: Split up fields that belong to other things into separate tables: Make sure that all record…

707 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

18 Experts available now in Live!

Get 1:1 Help Now