TinkerMan
Dooh!
- Local time
- Today, 19:23
- Joined
- Jan 12, 2005
- Messages
- 35
I have a problems which seems simple, but it's made me doubt everything I have learned about this; I suddenly find myself unable to grasp what I belive is a very small and easy solution, but I cannot!! (Either that or I have stumbled upon a real conseptual problem without realising it
)
This is what I had working nicely
Supplier
supplyer_ID : ID and PK of a supplyer
more boring attributes
Ingredient
ingredient_ID: ID and PK of ingredient
Name
Supplyer_ID: FK to who the supplyer is
Recipe
Recipe_ID: PK and ID
Recipe_unit_weight: How big each unit should be
other stuff
When making a recipe it is obvious that there can be many ingredients and that an ingredient can be used in many recipes, thus it's a many-many. I therefore created a junction table:
Recipe_Ingredients
Recipe_Ingredient_ID: PK (I was not completely sure if this one would come in handy, but it has not so far caused any problems (that I can see)
Recipe_ID: FK to which recipe it is for
ingredient_ID: FK to which ingredient
Receipe_ingredient_amount: How much of the ingredient
Receipe_Ingredient_order: In which order to put into recipe
I had a nice form where the Recipe was the parent and the subform contained the ingredients. The subform was driven by a query that had the columns from the Recipe_Ingredient table plus the name of the supplier as well as the version of the recipe (as there might be many). Using a combo to get the name of the Ingredient and binding on the Ingredient_ID I didn't need to also bring in the name of the Ingedient in the query.
Now enter problem: For professional people this lacks one thing; Being able to use another Recipe as an ingredient. After a lot of thinking the solution I envisioned was;
Add a column in the Recipe to flag that is a base recipe (true/false). Then adding a new column to the Recipe_Ingredient table, namely Base_ID, which is the Recipe_ID for which recipe to use. As there is already a Recipe_ID referring to which the ingredient belongs, I needed a different name. Additionally I had to change the relationships in the subform query to be left-joins (always include all columns in the Recipe_Ingredient and join in whatever you can find in the other two.
This works for diplay purposes (when I hand edit the join table). The problems I get is when adding a new recipe as ingredient in the subform;
When adding a base (recipe) at the point of saving the record my Recipe table validation kicks in saying you need to have Recipe_unit_weight > 0!!! I am not planning on adding any recipes here. This does however not always happen, as another error also kicks in: Microsoft Jet database engine cannot find a record in the table 'Supplier' with the key matching field(s) ''. As it's a recipe there is no supplier and I'm assuming it is trying to find a supplier.
If I strip away the extra columns from the query powering the subquey (like supplier and base (recipe) version) it works like a charm. In effect it means that the query only consists of the junction table.
It seems that having a two-way junction table with left-join with both "parents" is causing problems. Am I doing something fundamentally wrong here or is it Access that don't get the picture (and how do I tell it).
Any hints or suggestions are welcome
PS: using A2K db's in 2003
Thx

This is what I had working nicely
Supplier
supplyer_ID : ID and PK of a supplyer
more boring attributes
Ingredient
ingredient_ID: ID and PK of ingredient
Name
Supplyer_ID: FK to who the supplyer is
Recipe
Recipe_ID: PK and ID
Recipe_unit_weight: How big each unit should be
other stuff
When making a recipe it is obvious that there can be many ingredients and that an ingredient can be used in many recipes, thus it's a many-many. I therefore created a junction table:
Recipe_Ingredients
Recipe_Ingredient_ID: PK (I was not completely sure if this one would come in handy, but it has not so far caused any problems (that I can see)
Recipe_ID: FK to which recipe it is for
ingredient_ID: FK to which ingredient
Receipe_ingredient_amount: How much of the ingredient
Receipe_Ingredient_order: In which order to put into recipe
I had a nice form where the Recipe was the parent and the subform contained the ingredients. The subform was driven by a query that had the columns from the Recipe_Ingredient table plus the name of the supplier as well as the version of the recipe (as there might be many). Using a combo to get the name of the Ingredient and binding on the Ingredient_ID I didn't need to also bring in the name of the Ingedient in the query.
Now enter problem: For professional people this lacks one thing; Being able to use another Recipe as an ingredient. After a lot of thinking the solution I envisioned was;
Add a column in the Recipe to flag that is a base recipe (true/false). Then adding a new column to the Recipe_Ingredient table, namely Base_ID, which is the Recipe_ID for which recipe to use. As there is already a Recipe_ID referring to which the ingredient belongs, I needed a different name. Additionally I had to change the relationships in the subform query to be left-joins (always include all columns in the Recipe_Ingredient and join in whatever you can find in the other two.
This works for diplay purposes (when I hand edit the join table). The problems I get is when adding a new recipe as ingredient in the subform;
When adding a base (recipe) at the point of saving the record my Recipe table validation kicks in saying you need to have Recipe_unit_weight > 0!!! I am not planning on adding any recipes here. This does however not always happen, as another error also kicks in: Microsoft Jet database engine cannot find a record in the table 'Supplier' with the key matching field(s) ''. As it's a recipe there is no supplier and I'm assuming it is trying to find a supplier.
If I strip away the extra columns from the query powering the subquey (like supplier and base (recipe) version) it works like a charm. In effect it means that the query only consists of the junction table.
It seems that having a two-way junction table with left-join with both "parents" is causing problems. Am I doing something fundamentally wrong here or is it Access that don't get the picture (and how do I tell it).
Any hints or suggestions are welcome
PS: using A2K db's in 2003
Thx
