A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Access » Database Design
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

Lookup Evils



 
 
Thread Tools Display Modes
  #11  
Old March 23rd, 2006, 06:15 PM posted to microsoft.public.access.tablesdbdesign
external usenet poster
 
Posts: n/a
Default Lookup Evils

I can only refer you to the link I provided to the Access MVP site. If the
difficulties with lookup fields do not matter to you, you are of course free
to use them.
I did mention earlier in the thread that Value Lists are suited to small
lists that are not subject to change.

"Sam" wrote in message
...
I agree with most of everything in this discussion, however.....I have
fields
in my master table that in the 'Data/Type' I used Lookup Wizzard and used
a
Table for my data to be looked up. This works perfectly. If the original
data changes, I make the change in my Lookup Table and everything is
updated.
Using a Value List for small amounts of data is OK, but if the data
contains
very many records the LookUp Table is much easier. I am using the process
in
Tables, Queries, Forms based on the query and Reports based on the query.

"BruceM" wrote:

Yes, Insert Lookup Field is the same as using the Lookup Wizard. The
point that the Access MVPs and others have been making is that using a
lookup FIELD in a table can lead to problems. For one thing, it is
difficult if not impossible to change a lookup field to a conventional
field.
Let's say you have a table (tblStatus) for creating status reports, with
information about sales, inventory, etc. If you have a table field for
Department, just make it a text field in the table. On the form, create
a
combo box that has Department as its record source. You have two options
now. You can select Value List as the Row Source Type, then in Row
Source
type in a list of departments separated by semi-colons. Or you can
create a
department table (tblDept), then create a query (qryDept) based on that
table. Using the query will let you specify a sort order. In combo box
properties, select Table/Query as the Row Source Type, then select
qryDept
as the Row Source. If tblDept has a PK and a department name, and
qryDept
has the same (in that order), you would set your column count to 2, the
column widths to 0";1", and the bound column to 1 if you want to view the
department name and store the PK. If you want to store the department
name
itself you would set the bound column to 2. You could also just leave PK
out of qryDept. When you create a combo box its row source and column
count
default to 1, and the bound column defaults to 1.
Note that I am describing the use of tools at the user interface level
(the
form) to facilitate data entry. This is the standard and time-tested
approach. People sometimes disagree about details, but not about the
concept. In this example, tblDept functions as a lookup table that
supplies
values for the Department field in tblStatus. There is no need for user
interface tools at the table level, since users should not be entering or
changing data except through forms. If you create your lookups at the
form
level (using combo boxes as I have described, or list boxes), lookup
fields
will never be an issue.
In case you have not seen this article, it provides a succinct summary of
the problems with lookup FIELDS in tables.
http://www.mvps.org/access/lookupfields.htm

"HelenJ" wrote in message
...
Thanks for your comprehensive answer Bruce. I think I will stick with
PKs
since as you say if you change a value then it will change everywhere -
which
is what I want in this case.

As for the lookups - I must confess that I am still a bit confused - if
you
use insert Lookup field - this seems to be the same as using the lookup
wizard and if you choose to type in "the values that I want" then this
creates a value list. Or is it that at this stage you choose to use
more
than one column? Not something that I have ever done either!

I will carry on in happy designing mode :-)

Many thanks
"BruceM" wrote:

I don't think there is really a downside to adding a primary key (PK)
field.
If your table is a list of 50 states in the U.S.A., and if the state
name
is
all you are storing, then it probably doesn't matter if you have a PK,
but
it won't hurt either, and you may find you need it later. I'll just
add
here that my opinion is that if you are storing a single field it may
as
well be the actual value (e.g. the state name) as a PK in a related
table.
However, if you are storing the state name and an abbreviation (and
the
state flower or whatever), then you should probably store the PK, and
just
display the other fields without storing them.

There is no single answer to your question about whether to have a PK.
We
have a situation where I work in which the person's name has to appear
as
it
was when a particular type of document was created, so I have to store
the
actual name. If I stored the PK, then when a person's name changes
the
old
records will show the new name, which is not acceptable. If on the
other
hand you are keeping training records, you probably want old training
records to show the person's current name. In that case the PK must
be
stored. For another example, consider payroll. A person whose name
changes
receives a W-2 form for the new name, even if some of the paychecks
were
made out to the former name. I'm not trying to win a point, but
rather
to
suggest you consider the effect on old data of a change to something
like
a
person's name (or a country name, for that matter), which is subject
to
possible change.

A value list IS NOT the same as a lookup field. A value list may be
something like Yes, No, Maybe. You create it by selecting Value List
as
the
Row Source Type (in the combo box properties), and by adding
Yes;No;Maybe
to
the Row Source. This is OK for a limited list. If you need to add
"Probably" to the list you can insert that pretty easily into the row
source. However, if it is a list that is subject to change it is
often
easier to use a table or query as the row source.

A lookup field is created in table design view by selecting Insert
Lookup
Field. This is the thing that experienced developers urge you to
avoid.
The reasons have been discussed in numerous posts and articles. I
have
never used a lookup field, so have not experienced first-hand the
problems
that can result.


"HelenJ" wrote in message
...
I (think!) I am clear what a look up table is - but is it a good idea
to
have
a primary key in the lookup table? Or could it just be a single
field
with
the list of items required to populate the drop down?

I have in the past found that when I have used a value list on a
field
in
a
table (I assume this is what you mean by a lookup field) if you then
need
to
alter the values (yes OK you start to win your point here!) the
there
is
no
point in altering them in the table because the form doesn't update.

Thanks again

Helen

"BruceM" wrote:

To expand just a bit on what Jeff wrote, if you have a field into
which
you
can put one of just a few words or phrases then you can bind a
combo
box
to
that field, and make the combo box row source a Value List. If you
have
a
longer list (states or departments or whatever), and especially if
you
have
a list that could one day change, then you may do better to make a
table
containing just those values, and to use that table as the combo
box
row
source. This is an entirely different matter than using a lookup
field
in a
table. Lookup tables are fine. There is a big difference between
a
lookup
field and a lookup table that is used for populating a field.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables,
however
could
someone please explain how you avoid using them - is the answer
to
have
many
tiny tables with potentially only 2 fields (assuming it is
necessary
to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to
have
several
fields which have 2 or sometimes 3 options and it seems a lot to
create
a
table for this.

Many thanks

Helen











  #12  
Old March 23rd, 2006, 06:15 PM posted to microsoft.public.access.tablesdbdesign
external usenet poster
 
Posts: n/a
Default Lookup Evils

Just passing along what I've learned here. Good luck with the project.

"HelenJ" wrote in message
...
Thanks Bruce - very comprehensive!

"BruceM" wrote:

Yes, Insert Lookup Field is the same as using the Lookup Wizard. The
point that the Access MVPs and others have been making is that using a
lookup FIELD in a table can lead to problems. For one thing, it is
difficult if not impossible to change a lookup field to a conventional
field.
Let's say you have a table (tblStatus) for creating status reports, with
information about sales, inventory, etc. If you have a table field for
Department, just make it a text field in the table. On the form, create
a
combo box that has Department as its record source. You have two options
now. You can select Value List as the Row Source Type, then in Row
Source
type in a list of departments separated by semi-colons. Or you can
create a
department table (tblDept), then create a query (qryDept) based on that
table. Using the query will let you specify a sort order. In combo box
properties, select Table/Query as the Row Source Type, then select
qryDept
as the Row Source. If tblDept has a PK and a department name, and
qryDept
has the same (in that order), you would set your column count to 2, the
column widths to 0";1", and the bound column to 1 if you want to view the
department name and store the PK. If you want to store the department
name
itself you would set the bound column to 2. You could also just leave PK
out of qryDept. When you create a combo box its row source and column
count
default to 1, and the bound column defaults to 1.
Note that I am describing the use of tools at the user interface level
(the
form) to facilitate data entry. This is the standard and time-tested
approach. People sometimes disagree about details, but not about the
concept. In this example, tblDept functions as a lookup table that
supplies
values for the Department field in tblStatus. There is no need for user
interface tools at the table level, since users should not be entering or
changing data except through forms. If you create your lookups at the
form
level (using combo boxes as I have described, or list boxes), lookup
fields
will never be an issue.
In case you have not seen this article, it provides a succinct summary of
the problems with lookup FIELDS in tables.
http://www.mvps.org/access/lookupfields.htm

"HelenJ" wrote in message
...
Thanks for your comprehensive answer Bruce. I think I will stick with
PKs
since as you say if you change a value then it will change everywhere -
which
is what I want in this case.

As for the lookups - I must confess that I am still a bit confused - if
you
use insert Lookup field - this seems to be the same as using the lookup
wizard and if you choose to type in "the values that I want" then this
creates a value list. Or is it that at this stage you choose to use
more
than one column? Not something that I have ever done either!

I will carry on in happy designing mode :-)

Many thanks
"BruceM" wrote:

I don't think there is really a downside to adding a primary key (PK)
field.
If your table is a list of 50 states in the U.S.A., and if the state
name
is
all you are storing, then it probably doesn't matter if you have a PK,
but
it won't hurt either, and you may find you need it later. I'll just
add
here that my opinion is that if you are storing a single field it may
as
well be the actual value (e.g. the state name) as a PK in a related
table.
However, if you are storing the state name and an abbreviation (and
the
state flower or whatever), then you should probably store the PK, and
just
display the other fields without storing them.

There is no single answer to your question about whether to have a PK.
We
have a situation where I work in which the person's name has to appear
as
it
was when a particular type of document was created, so I have to store
the
actual name. If I stored the PK, then when a person's name changes
the
old
records will show the new name, which is not acceptable. If on the
other
hand you are keeping training records, you probably want old training
records to show the person's current name. In that case the PK must
be
stored. For another example, consider payroll. A person whose name
changes
receives a W-2 form for the new name, even if some of the paychecks
were
made out to the former name. I'm not trying to win a point, but
rather
to
suggest you consider the effect on old data of a change to something
like
a
person's name (or a country name, for that matter), which is subject
to
possible change.

A value list IS NOT the same as a lookup field. A value list may be
something like Yes, No, Maybe. You create it by selecting Value List
as
the
Row Source Type (in the combo box properties), and by adding
Yes;No;Maybe
to
the Row Source. This is OK for a limited list. If you need to add
"Probably" to the list you can insert that pretty easily into the row
source. However, if it is a list that is subject to change it is
often
easier to use a table or query as the row source.

A lookup field is created in table design view by selecting Insert
Lookup
Field. This is the thing that experienced developers urge you to
avoid.
The reasons have been discussed in numerous posts and articles. I
have
never used a lookup field, so have not experienced first-hand the
problems
that can result.


"HelenJ" wrote in message
...
I (think!) I am clear what a look up table is - but is it a good idea
to
have
a primary key in the lookup table? Or could it just be a single
field
with
the list of items required to populate the drop down?

I have in the past found that when I have used a value list on a
field
in
a
table (I assume this is what you mean by a lookup field) if you then
need
to
alter the values (yes OK you start to win your point here!) the
there
is
no
point in altering them in the table because the form doesn't update.

Thanks again

Helen

"BruceM" wrote:

To expand just a bit on what Jeff wrote, if you have a field into
which
you
can put one of just a few words or phrases then you can bind a
combo
box
to
that field, and make the combo box row source a Value List. If you
have
a
longer list (states or departments or whatever), and especially if
you
have
a list that could one day change, then you may do better to make a
table
containing just those values, and to use that table as the combo
box
row
source. This is an entirely different matter than using a lookup
field
in a
table. Lookup tables are fine. There is a big difference between
a
lookup
field and a lookup table that is used for populating a field.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables,
however
could
someone please explain how you avoid using them - is the answer
to
have
many
tiny tables with potentially only 2 fields (assuming it is
necessary
to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to
have
several
fields which have 2 or sometimes 3 options and it seems a lot to
create
a
table for this.

Many thanks

Helen











  #13  
Old March 23rd, 2006, 08:39 PM posted to microsoft.public.access.tablesdbdesign
external usenet poster
 
Posts: n/a
Default Lookup Evils

On Thu, 23 Mar 2006 09:38:29 -0800, Sam
wrote:

I agree with most of everything in this discussion, however.....I have fields
in my master table that in the 'Data/Type' I used Lookup Wizzard and used a
Table for my data to be looked up. This works perfectly.


Ok, try sorting a Query by the lookup field.
Or try joining to another table joining by the lookup field.

Doesn't work!

Lookup fields are very good at getting new users from A to B to C.

They fall flat if the user wants to go past D.

John W. Vinson[MVP]
  #14  
Old March 23rd, 2006, 10:05 PM posted to microsoft.public.access.tablesdbdesign
external usenet poster
 
Posts: n/a
Default Lookup Evils

Everything the referenced link says is correct but there really are cases
where the Lookups won't cause any harm. Let me try to separate the times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key that is
different from the value you want to display. For example, you have a table
of department names and each department has an ID. Adding a lookup at the
table level will cause problems with both nested queries and VBA code due to
the confusion between the departmentID and the departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you want to
display. An example might be a State code table. This won't work if you
want to display the StateName. In that case the key field would be
different from the display field.
2. You have a small list of values and the value you display is the value
you want to save. An example might be Male, Female, Unknown. If the value
you want to save is a code - M, F, U then you should not use a table level
lookup. Keep in mind that combos and listboxes work fine with text values
but you need numeric values for option groups so if you want to use an
option group on a form, you'll have to work around the numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are not using
lookup value tables, you need to be very careful to keep multiple instances
of combos in sync. You will keep a validation rule at the table level to
ensure that bad data cannot be entered and use combos on forms to provide
pick lists but you will be responsible for making the same changes to the
table field's validation rule property and all combos based on that list.
The next version of Access will take care of this little problem of keeping
the value list and the combos in sync but the current and older versions do
not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is essentially
a table within a table. I have forms and reports and a table that I add to
all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables, however could
someone please explain how you avoid using them - is the answer to have
many
tiny tables with potentially only 2 fields (assuming it is necessary to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to have several
fields which have 2 or sometimes 3 options and it seems a lot to create a
table for this.

Many thanks

Helen



  #15  
Old March 24th, 2006, 12:31 PM posted to microsoft.public.access.tablesdbdesign
external usenet poster
 
Posts: n/a
Default Lookup Evils

Thanks for pointing that out. I did a little more experimenting, and found
no problems in sorting by the lookup field when it uses a value list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really are cases
where the Lookups won't cause any harm. Let me try to separate the times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key that is
different from the value you want to display. For example, you have a
table of department names and each department has an ID. Adding a lookup
at the table level will cause problems with both nested queries and VBA
code due to the confusion between the departmentID and the departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you want to
display. An example might be a State code table. This won't work if you
want to display the StateName. In that case the key field would be
different from the display field.
2. You have a small list of values and the value you display is the value
you want to save. An example might be Male, Female, Unknown. If the
value you want to save is a code - M, F, U then you should not use a table
level lookup. Keep in mind that combos and listboxes work fine with text
values but you need numeric values for option groups so if you want to use
an option group on a form, you'll have to work around the numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are not
using lookup value tables, you need to be very careful to keep multiple
instances of combos in sync. You will keep a validation rule at the table
level to ensure that bad data cannot be entered and use combos on forms to
provide pick lists but you will be responsible for making the same changes
to the table field's validation rule property and all combos based on that
list. The next version of Access will take care of this little problem of
keeping the value list and the combos in sync but the current and older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and a table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables, however
could
someone please explain how you avoid using them - is the answer to have
many
tiny tables with potentially only 2 fields (assuming it is necessary to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to have
several
fields which have 2 or sometimes 3 options and it seems a lot to create a
table for this.

Many thanks

Helen





  #16  
Old March 20th, 2008, 05:21 PM posted to microsoft.public.access.tablesdbdesign
jessi
external usenet poster
 
Posts: 23
Default Lookup Evils

My question is related to the whole discussion of "lookup evils".

I now understand the logic of only including the user interface (the lookup)
in the form rather than directly in the table. If you have many tables in
which there is a "Unit" field. The unit field stores a measurement unit (ft,
cm, m, L, gallon, etc.). As nearly every table in the database contains a
"Unit" field I wanted to create a lookup table in which to store the
appropriate units so that users are forced to enter the unit in a standard
form. I see that I can do this by using a combo box at the form level. But,
is it necessary or good design to create a relationship between the table
data is being entered into and the input table? I apologize if this question
isn't worded very well, I'm still learning the terminology.

Jessi

"BruceM" wrote:

Thanks for pointing that out. I did a little more experimenting, and found
no problems in sorting by the lookup field when it uses a value list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really are cases
where the Lookups won't cause any harm. Let me try to separate the times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key that is
different from the value you want to display. For example, you have a
table of department names and each department has an ID. Adding a lookup
at the table level will cause problems with both nested queries and VBA
code due to the confusion between the departmentID and the departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you want to
display. An example might be a State code table. This won't work if you
want to display the StateName. In that case the key field would be
different from the display field.
2. You have a small list of values and the value you display is the value
you want to save. An example might be Male, Female, Unknown. If the
value you want to save is a code - M, F, U then you should not use a table
level lookup. Keep in mind that combos and listboxes work fine with text
values but you need numeric values for option groups so if you want to use
an option group on a form, you'll have to work around the numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are not
using lookup value tables, you need to be very careful to keep multiple
instances of combos in sync. You will keep a validation rule at the table
level to ensure that bad data cannot be entered and use combos on forms to
provide pick lists but you will be responsible for making the same changes
to the table field's validation rule property and all combos based on that
list. The next version of Access will take care of this little problem of
keeping the value list and the combos in sync but the current and older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and a table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables, however
could
someone please explain how you avoid using them - is the answer to have
many
tiny tables with potentially only 2 fields (assuming it is necessary to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to have
several
fields which have 2 or sometimes 3 options and it seems a lot to create a
table for this.

Many thanks

Helen






  #17  
Old March 20th, 2008, 05:57 PM posted to microsoft.public.access.tablesdbdesign
Evi
external usenet poster
 
Posts: 898
Default Lookup Evils

.. Putting the units in another table is an excellent idea.

It is indeed good design to create a relationship. However, if you add a
field to an existing table, you may need to run a series of Update Queries
to get you started before you join up the tables and 'Enforce Referential
Integrity'

You may even need to update some of the records by hand (using your combo
box in a form of course) before you can join your tables in the
Relationships Window. (I've even had to resort to calling one of the items
in my 'lookup' table 'Unknown' because the unit that the inputter used could
have been almost anything. But this just highlighted the necessity for the
table)

You can add a 'lookup' table more than once to the relationship window or in
a query grid so it can join to more than one table but I have a sinking
feeling that you may have a design problem when you say that you have many
tables in which there is a Unit field - but then maybe I'm being
unnecessarily gloomy.

Evi



"Jessi" wrote in message
...
My question is related to the whole discussion of "lookup evils".

I now understand the logic of only including the user interface (the

lookup)
in the form rather than directly in the table. If you have many tables in
which there is a "Unit" field. The unit field stores a measurement unit

(ft,
cm, m, L, gallon, etc.). As nearly every table in the database contains a
"Unit" field I wanted to create a lookup table in which to store the
appropriate units so that users are forced to enter the unit in a standard
form. I see that I can do this by using a combo box at the form level.

But,
is it necessary or good design to create a relationship between the table
data is being entered into and the input table? I apologize if this

question
isn't worded very well, I'm still learning the terminology.

Jessi

"BruceM" wrote:

Thanks for pointing that out. I did a little more experimenting, and

found
no problems in sorting by the lookup field when it uses a value list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep

doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really are

cases
where the Lookups won't cause any harm. Let me try to separate the

times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key that is
different from the value you want to display. For example, you have a
table of department names and each department has an ID. Adding a

lookup
at the table level will cause problems with both nested queries and

VBA
code due to the confusion between the departmentID and the

departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you

want to
display. An example might be a State code table. This won't work if

you
want to display the StateName. In that case the key field would be
different from the display field.
2. You have a small list of values and the value you display is the

value
you want to save. An example might be Male, Female, Unknown. If the
value you want to save is a code - M, F, U then you should not use a

table
level lookup. Keep in mind that combos and listboxes work fine with

text
values but you need numeric values for option groups so if you want to

use
an option group on a form, you'll have to work around the numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are not
using lookup value tables, you need to be very careful to keep

multiple
instances of combos in sync. You will keep a validation rule at the

table
level to ensure that bad data cannot be entered and use combos on

forms to
provide pick lists but you will be responsible for making the same

changes
to the table field's validation rule property and all combos based on

that
list. The next version of Access will take care of this little problem

of
keeping the value list and the combos in sync but the current and

older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and a

table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables, however
could
someone please explain how you avoid using them - is the answer to

have
many
tiny tables with potentially only 2 fields (assuming it is necessary

to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to have
several
fields which have 2 or sometimes 3 options and it seems a lot to

create a
table for this.

Many thanks

Helen







  #18  
Old March 20th, 2008, 06:57 PM posted to microsoft.public.access.tablesdbdesign
jessi
external usenet poster
 
Posts: 23
Default Lookup Evils

Thank you for the reply Evi.

I thought I would provide a more concrete example.

tblWellCasingDetails
StationID (pk)
ComponentID (pk)
ComponentDescription
InnerDiameter
InnerDiameterUnit
TopZoneDepth
BottomZoneDepth
DepthUnit
DepthReference
Comments

tblHorizontalSurveyData
StationID (pk)
SurveyDate
SurveyGeneration (pk)
CurrentSurvey
SurveyCompany
XCoordinate
YCoordinate
CoordinateUnit
CoordinateSystem
HorizontalDatum
Notes

tblMeasurementUnits
Unit (pk)
UnitFullName
MeasurementSystem
MeasurementType

The first two tables above both contain fields which require an input for
the "Unit". In fact, tbl:WellCasingDetails has two fields which require an
input for the "Unit" (InnerDiameterUnit and DepthUnit). The table
tbl:MeasurementUnits is meant to serve as a look up table for the two tables
above and several others. I can create a relationship between
tbl:MeasurementUnits and tbl:HorizontalSurveyData and enforce referential
integrity. However, I run into a problem when I try to create a relationship
from InnerDiameterUnit and from DepthUnit in the tbl:WellCasingDetails to the
tbl:MeasurementUnits. I can create the relationships, but cannot enforce
referential integrity. Any suggestions?

Jessi



"Evi" wrote:

.. Putting the units in another table is an excellent idea.

It is indeed good design to create a relationship. However, if you add a
field to an existing table, you may need to run a series of Update Queries
to get you started before you join up the tables and 'Enforce Referential
Integrity'

You may even need to update some of the records by hand (using your combo
box in a form of course) before you can join your tables in the
Relationships Window. (I've even had to resort to calling one of the items
in my 'lookup' table 'Unknown' because the unit that the inputter used could
have been almost anything. But this just highlighted the necessity for the
table)

You can add a 'lookup' table more than once to the relationship window or in
a query grid so it can join to more than one table but I have a sinking
feeling that you may have a design problem when you say that you have many
tables in which there is a Unit field - but then maybe I'm being
unnecessarily gloomy.

Evi



"Jessi" wrote in message
...
My question is related to the whole discussion of "lookup evils".

I now understand the logic of only including the user interface (the

lookup)
in the form rather than directly in the table. If you have many tables in
which there is a "Unit" field. The unit field stores a measurement unit

(ft,
cm, m, L, gallon, etc.). As nearly every table in the database contains a
"Unit" field I wanted to create a lookup table in which to store the
appropriate units so that users are forced to enter the unit in a standard
form. I see that I can do this by using a combo box at the form level.

But,
is it necessary or good design to create a relationship between the table
data is being entered into and the input table? I apologize if this

question
isn't worded very well, I'm still learning the terminology.

Jessi

"BruceM" wrote:

Thanks for pointing that out. I did a little more experimenting, and

found
no problems in sorting by the lookup field when it uses a value list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep

doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really are

cases
where the Lookups won't cause any harm. Let me try to separate the

times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key that is
different from the value you want to display. For example, you have a
table of department names and each department has an ID. Adding a

lookup
at the table level will cause problems with both nested queries and

VBA
code due to the confusion between the departmentID and the

departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you

want to
display. An example might be a State code table. This won't work if

you
want to display the StateName. In that case the key field would be
different from the display field.
2. You have a small list of values and the value you display is the

value
you want to save. An example might be Male, Female, Unknown. If the
value you want to save is a code - M, F, U then you should not use a

table
level lookup. Keep in mind that combos and listboxes work fine with

text
values but you need numeric values for option groups so if you want to

use
an option group on a form, you'll have to work around the numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are not
using lookup value tables, you need to be very careful to keep

multiple
instances of combos in sync. You will keep a validation rule at the

table
level to ensure that bad data cannot be entered and use combos on

forms to
provide pick lists but you will be responsible for making the same

changes
to the table field's validation rule property and all combos based on

that
list. The next version of Access will take care of this little problem

of
keeping the value list and the combos in sync but the current and

older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and a

table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables, however
could
someone please explain how you avoid using them - is the answer to

have
many
tiny tables with potentially only 2 fields (assuming it is necessary

to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to have
several
fields which have 2 or sometimes 3 options and it seems a lot to

create a
table for this.

Many thanks

Helen








  #19  
Old March 20th, 2008, 09:04 PM posted to microsoft.public.access.tablesdbdesign
Evi
external usenet poster
 
Posts: 898
Default Lookup Evils

I can't comment on your table structure - I've no experience in this kind of
db but I can see why you wanted all those unit fields now.

Does it tell you why you can't re-inforce ref integ?
If it's because you want to link the table twice, then just add the units
table a second time to the relationship window.

I suspect that it is because you have made the Unit Abbreviation the Primary
Key field of the Units Table but someone has not used your current
convention (eg they may have put a space in front of the l or written cms
instead of cm).
We can spot the faulty entries by using a Find Unmatched Query to find
anything in your main table's units field that isn't in your Units table.
You can then edit those entries by hand

Switch on Name Autocorrect, just for now. (switch it off when you've
finished everything)
I'm not sure that it is a good idea to use the Unit Abbreviation field as
the Primary Key field (someone else can confirm or deny this). Autonumbers
are safer because they can't be edited at all. They look ugly in tables but
the user need never see them. The combo boxes will contain them in their
first column but the wizard will encourage you to hide this so that the user
will only see the second column with the actual letters.
Lets say you add an Autonumber field to your Units table (call it UnitID)

To start with, add a number field to your Main Input table, never mind what
you call it, lets say also UnitID. In the end you can rename it by the same
name as your original field if you have to.

Once you have used your FindUnmatched table to check that both table have
the same data in the MeasurementUnit field then you can put both tables into
a query window and join them by the Measurement unit field (ie not the ID
field)

Check that the Input table still has the same number of records as before
you joined them. Put the letter fields from both tables into your query grid
and check if they have the same letters in them. (a fairly quick glance at
an example of each unit should do the trick)
Remove the other fields. Change the query to an Update Query. Add the UnitId
field from your Main table.
In the Update To line put

tblMeasurementUnits!UnitID

Do the same for the other UnitID type fields in your other tables.

Because the tables are linked, the UnitID field in your main table will now
have the correct ID number so that if it is added to a query with the
UnitAbbreviation field from the Measurements table you will see the correct
measurement.
Change the query back to a Select query and add fields and in the query
window to and check that all the fields in your main table are now filled.
then you can decide if you want to rename your Main Table's UnitID Field to
the name of your letter field.

Evi



"Jessi" wrote in message
...
Thank you for the reply Evi.

I thought I would provide a more concrete example.

tblWellCasingDetails
StationID (pk)
ComponentID (pk)
ComponentDescription
InnerDiameter
InnerDiameterUnit
TopZoneDepth
BottomZoneDepth
DepthUnit
DepthReference
Comments

tblHorizontalSurveyData
StationID (pk)
SurveyDate
SurveyGeneration (pk)
CurrentSurvey
SurveyCompany
XCoordinate
YCoordinate
CoordinateUnit
CoordinateSystem
HorizontalDatum
Notes

tblMeasurementUnits
Unit (pk)
UnitFullName
MeasurementSystem
MeasurementType

The first two tables above both contain fields which require an input for
the "Unit". In fact, tbl:WellCasingDetails has two fields which require

an
input for the "Unit" (InnerDiameterUnit and DepthUnit). The table
tbl:MeasurementUnits is meant to serve as a look up table for the two

tables
above and several others. I can create a relationship between
tbl:MeasurementUnits and tbl:HorizontalSurveyData and enforce referential
integrity. However, I run into a problem when I try to create a

relationship
from InnerDiameterUnit and from DepthUnit in the tbl:WellCasingDetails to

the
tbl:MeasurementUnits. I can create the relationships, but cannot enforce
referential integrity. Any suggestions?

Jessi



"Evi" wrote:

.. Putting the units in another table is an excellent idea.

It is indeed good design to create a relationship. However, if you add a
field to an existing table, you may need to run a series of Update

Queries
to get you started before you join up the tables and 'Enforce

Referential
Integrity'

You may even need to update some of the records by hand (using your

combo
box in a form of course) before you can join your tables in the
Relationships Window. (I've even had to resort to calling one of the

items
in my 'lookup' table 'Unknown' because the unit that the inputter used

could
have been almost anything. But this just highlighted the necessity for

the
table)

You can add a 'lookup' table more than once to the relationship window

or in
a query grid so it can join to more than one table but I have a sinking
feeling that you may have a design problem when you say that you have

many
tables in which there is a Unit field - but then maybe I'm being
unnecessarily gloomy.

Evi



"Jessi" wrote in message
...
My question is related to the whole discussion of "lookup evils".

I now understand the logic of only including the user interface (the

lookup)
in the form rather than directly in the table. If you have many

tables in
which there is a "Unit" field. The unit field stores a measurement

unit
(ft,
cm, m, L, gallon, etc.). As nearly every table in the database

contains a
"Unit" field I wanted to create a lookup table in which to store the
appropriate units so that users are forced to enter the unit in a

standard
form. I see that I can do this by using a combo box at the form

level.
But,
is it necessary or good design to create a relationship between the

table
data is being entered into and the input table? I apologize if this

question
isn't worded very well, I'm still learning the terminology.

Jessi

"BruceM" wrote:

Thanks for pointing that out. I did a little more experimenting,

and
found
no problems in sorting by the lookup field when it uses a value

list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep

doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really

are
cases
where the Lookups won't cause any harm. Let me try to separate

the
times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key

that is
different from the value you want to display. For example, you

have a
table of department names and each department has an ID. Adding a

lookup
at the table level will cause problems with both nested queries

and
VBA
code due to the confusion between the departmentID and the

departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you

want to
display. An example might be a State code table. This won't work

if
you
want to display the StateName. In that case the key field would

be
different from the display field.
2. You have a small list of values and the value you display is

the
value
you want to save. An example might be Male, Female, Unknown. If

the
value you want to save is a code - M, F, U then you should not use

a
table
level lookup. Keep in mind that combos and listboxes work fine

with
text
values but you need numeric values for option groups so if you

want to
use
an option group on a form, you'll have to work around the

numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are

not
using lookup value tables, you need to be very careful to keep

multiple
instances of combos in sync. You will keep a validation rule at

the
table
level to ensure that bad data cannot be entered and use combos on

forms to
provide pick lists but you will be responsible for making the same

changes
to the table field's validation rule property and all combos based

on
that
list. The next version of Access will take care of this little

problem
of
keeping the value list and the combos in sync but the current and

older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and

a
table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables,

however
could
someone please explain how you avoid using them - is the answer

to
have
many
tiny tables with potentially only 2 fields (assuming it is

necessary
to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to

have
several
fields which have 2 or sometimes 3 options and it seems a lot to

create a
table for this.

Many thanks

Helen










  #20  
Old March 20th, 2008, 10:05 PM posted to microsoft.public.access.tablesdbdesign
jessi
external usenet poster
 
Posts: 23
Default Lookup Evils

Yeah, this particular database is for storing/retreiving/analyzing
groundwater data. I wish there were more examples out there for designing
this kind of database but they are usually more geared toward business use.

Anyway, I tried adding the units table to the relation window again and that
seems to work fine (I can create both relationships and enforce referential
integrity). I just didn't know if there was something "wrong" with adding
the table to the window more than once. As far as the primary key is
concerned, I too have been thinking about whether I want to use the unit for
the primary key. Its an ongoing debate and I'll have to read more to make
that decision. That's for your useful comments/suggestions.

Jessi

"Evi" wrote:

I can't comment on your table structure - I've no experience in this kind of
db but I can see why you wanted all those unit fields now.

Does it tell you why you can't re-inforce ref integ?
If it's because you want to link the table twice, then just add the units
table a second time to the relationship window.

I suspect that it is because you have made the Unit Abbreviation the Primary
Key field of the Units Table but someone has not used your current
convention (eg they may have put a space in front of the l or written cms
instead of cm).
We can spot the faulty entries by using a Find Unmatched Query to find
anything in your main table's units field that isn't in your Units table.
You can then edit those entries by hand

Switch on Name Autocorrect, just for now. (switch it off when you've
finished everything)
I'm not sure that it is a good idea to use the Unit Abbreviation field as
the Primary Key field (someone else can confirm or deny this). Autonumbers
are safer because they can't be edited at all. They look ugly in tables but
the user need never see them. The combo boxes will contain them in their
first column but the wizard will encourage you to hide this so that the user
will only see the second column with the actual letters.
Lets say you add an Autonumber field to your Units table (call it UnitID)

To start with, add a number field to your Main Input table, never mind what
you call it, lets say also UnitID. In the end you can rename it by the same
name as your original field if you have to.

Once you have used your FindUnmatched table to check that both table have
the same data in the MeasurementUnit field then you can put both tables into
a query window and join them by the Measurement unit field (ie not the ID
field)

Check that the Input table still has the same number of records as before
you joined them. Put the letter fields from both tables into your query grid
and check if they have the same letters in them. (a fairly quick glance at
an example of each unit should do the trick)
Remove the other fields. Change the query to an Update Query. Add the UnitId
field from your Main table.
In the Update To line put

tblMeasurementUnits!UnitID

Do the same for the other UnitID type fields in your other tables.

Because the tables are linked, the UnitID field in your main table will now
have the correct ID number so that if it is added to a query with the
UnitAbbreviation field from the Measurements table you will see the correct
measurement.
Change the query back to a Select query and add fields and in the query
window to and check that all the fields in your main table are now filled.
then you can decide if you want to rename your Main Table's UnitID Field to
the name of your letter field.

Evi



"Jessi" wrote in message
...
Thank you for the reply Evi.

I thought I would provide a more concrete example.

tblWellCasingDetails
StationID (pk)
ComponentID (pk)
ComponentDescription
InnerDiameter
InnerDiameterUnit
TopZoneDepth
BottomZoneDepth
DepthUnit
DepthReference
Comments

tblHorizontalSurveyData
StationID (pk)
SurveyDate
SurveyGeneration (pk)
CurrentSurvey
SurveyCompany
XCoordinate
YCoordinate
CoordinateUnit
CoordinateSystem
HorizontalDatum
Notes

tblMeasurementUnits
Unit (pk)
UnitFullName
MeasurementSystem
MeasurementType

The first two tables above both contain fields which require an input for
the "Unit". In fact, tbl:WellCasingDetails has two fields which require

an
input for the "Unit" (InnerDiameterUnit and DepthUnit). The table
tbl:MeasurementUnits is meant to serve as a look up table for the two

tables
above and several others. I can create a relationship between
tbl:MeasurementUnits and tbl:HorizontalSurveyData and enforce referential
integrity. However, I run into a problem when I try to create a

relationship
from InnerDiameterUnit and from DepthUnit in the tbl:WellCasingDetails to

the
tbl:MeasurementUnits. I can create the relationships, but cannot enforce
referential integrity. Any suggestions?

Jessi



"Evi" wrote:

.. Putting the units in another table is an excellent idea.

It is indeed good design to create a relationship. However, if you add a
field to an existing table, you may need to run a series of Update

Queries
to get you started before you join up the tables and 'Enforce

Referential
Integrity'

You may even need to update some of the records by hand (using your

combo
box in a form of course) before you can join your tables in the
Relationships Window. (I've even had to resort to calling one of the

items
in my 'lookup' table 'Unknown' because the unit that the inputter used

could
have been almost anything. But this just highlighted the necessity for

the
table)

You can add a 'lookup' table more than once to the relationship window

or in
a query grid so it can join to more than one table but I have a sinking
feeling that you may have a design problem when you say that you have

many
tables in which there is a Unit field - but then maybe I'm being
unnecessarily gloomy.

Evi



"Jessi" wrote in message
...
My question is related to the whole discussion of "lookup evils".

I now understand the logic of only including the user interface (the
lookup)
in the form rather than directly in the table. If you have many

tables in
which there is a "Unit" field. The unit field stores a measurement

unit
(ft,
cm, m, L, gallon, etc.). As nearly every table in the database

contains a
"Unit" field I wanted to create a lookup table in which to store the
appropriate units so that users are forced to enter the unit in a

standard
form. I see that I can do this by using a combo box at the form

level.
But,
is it necessary or good design to create a relationship between the

table
data is being entered into and the input table? I apologize if this
question
isn't worded very well, I'm still learning the terminology.

Jessi

"BruceM" wrote:

Thanks for pointing that out. I did a little more experimenting,

and
found
no problems in sorting by the lookup field when it uses a value

list. I
expect it would be the same if I used a one-column row source query.
However, if I'm going to construct a combo box anyhow I'll just keep
doing
it on a form. I see no use for a user interface in a table.

"Pat Hartman(MVP)" wrote in message
...
Everything the referenced link says is correct but there really

are
cases
where the Lookups won't cause any harm. Let me try to separate

the
times
when a lookup causes a problem and when it doesn't.
Lookup not OK:
1. you have a table of values and that table has a primary key

that is
different from the value you want to display. For example, you

have a
table of department names and each department has an ID. Adding a
lookup
at the table level will cause problems with both nested queries

and
VBA
code due to the confusion between the departmentID and the
departmentName.

Lookup OK:
1. You have a table of values and the primary key is the value you
want to
display. An example might be a State code table. This won't work

if
you
want to display the StateName. In that case the key field would

be
different from the display field.
2. You have a small list of values and the value you display is

the
value
you want to save. An example might be Male, Female, Unknown. If

the
value you want to save is a code - M, F, U then you should not use

a
table
level lookup. Keep in mind that combos and listboxes work fine

with
text
values but you need numeric values for option groups so if you

want to
use
an option group on a form, you'll have to work around the

numeric/text
conversion problem with code.

In ALL cases, lookups on Forms do not cause problems. If you are

not
using lookup value tables, you need to be very careful to keep
multiple
instances of combos in sync. You will keep a validation rule at

the
table
level to ensure that bad data cannot be entered and use combos on
forms to
provide pick lists but you will be responsible for making the same
changes
to the table field's validation rule property and all combos based

on
that
list. The next version of Access will take care of this little

problem
of
keeping the value list and the combos in sync but the current and
older
versions do not. That is why most professionals rely on a table.

I happen to use a common table for all my simple lookups. It is
essentially a table within a table. I have forms and reports and

a
table
that I add to all my applications.

"HelenJ" wrote in message
...
I have been reading all about the evils of lookups in tables,

however
could
someone please explain how you avoid using them - is the answer

to
have
many
tiny tables with potentially only 2 fields (assuming it is

necessary
to
have
a PK in every table) and often only 2 records.

I am just starting the design of a new database and I seem to

have
several
fields which have 2 or sometimes 3 options and it seems a lot to
create a
table for this.

Many thanks

Helen











 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump

Similar Threads
Thread Thread Starter Forum Replies Last Post
MVPs - The Evils of the Lookup Field legere864 Using Forms 8 January 25th, 2006 02:41 PM
Lookup tables Wind54Surfer General Discussion 15 August 11th, 2005 12:54 AM
lookup vs combo box Scubaman General Discussion 4 June 7th, 2005 02:02 AM
"Evils of Lookup FIelds"? el zorro Database Design 3 November 16th, 2004 01:38 PM
Lookup fields - what's wrong with them? NATHAN SANDERS New Users 2 May 4th, 2004 10:51 AM


All times are GMT +1. The time now is 03:33 AM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.