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  

Recursive Table



 
 
Thread Tools Display Modes
  #1  
Old December 23rd, 2008, 07:57 PM posted to microsoft.public.access.tablesdbdesign
Mailmanny
external usenet poster
 
Posts: 7
Default Recursive Table

I need to store and retrive hierarchial data. The data represents categories
for a product catalog that can have an undetermind number of subcategories. i
andt to use a recursive table but am not sure if that's right. I have the
recursive idea down but my problem is finding the lowest level category so i
can store it in a new product reecord without knowing that it is lowest level
because i enterded it.

How can I build a querry or form that will displat the data to where i can
select a "node" and have it give me the childern of thet node, then again
until i am at the lowest or "leaf" level? i need this so i can store the leaf
level in the product table. but i cant figure out how to make an interface or
querry that makes this "user" friendly.
  #2  
Old December 23rd, 2008, 09:17 PM posted to microsoft.public.access.tablesdbdesign
Steve[_57_]
external usenet poster
 
Posts: 598
Default Recursive Table

Will this work for you ..........

TblCategory
CategoryID
Category

TblSubcategory
SubcategoryID
CategoryID
Subcategory

TblProduct
ProductID
ProductName
Other product fields
CategoryID
SubcategoryID

Subcategories of each Category are recorded in TblSubcategory. When you
record a Product, it is assigned to a Category(CategoryID) and then on your
form you have cascading comboboxes that limit the Product to being assigned
to ONLY a subcategory of the assigned Category.

Steve


"Mailmanny" wrote in message
...
I need to store and retrive hierarchial data. The data represents
categories
for a product catalog that can have an undetermind number of
subcategories. i
andt to use a recursive table but am not sure if that's right. I have the
recursive idea down but my problem is finding the lowest level category so
i
can store it in a new product reecord without knowing that it is lowest
level
because i enterded it.

How can I build a querry or form that will displat the data to where i can
select a "node" and have it give me the childern of thet node, then again
until i am at the lowest or "leaf" level? i need this so i can store the
leaf
level in the product table. but i cant figure out how to make an interface
or
querry that makes this "user" friendly.



  #3  
Old December 24th, 2008, 12:25 PM posted to microsoft.public.access.tablesdbdesign
Stefan Hoffmann
external usenet poster
 
Posts: 991
Default Recursive Table

hi,

Mailmanny wrote:
I need to store and retrive hierarchial data. The data represents categories
for a product catalog that can have an undetermind number of subcategories.

Use two tables:

Product: ID (PK, Autonumber) etc.
ProductCategory: ProductID (PK, FK, Long),
(Sub-)CategoryID (PK, FK, Long)

In the table ProductCategory you have a combined primary key (PK) of the
two fields. FK mean you have a foreign key relationship to the
corresponding tables.

andt to use a recursive table but am not sure if that's right. I have the
recursive idea down but my problem is finding the lowest level category so i
can store it in a new product reecord without knowing that it is lowest level
because i enterded it.

You may give us a concrete example?

How can I build a querry or form that will displat the data to where i can
select a "node" and have it give me the childern of thet node, then again
until i am at the lowest or "leaf" level?

Okay, what does your categories/subcategories look like:

a)

Category 1
Subcategory 11
Subcategory 12
Category 2
Category 3
Subcategory 31
Subcategory 32
Subcategory 33


b)

Category 1
Category 11
Category 111
Category 112
Category 2
Category 21
Category 22
Category 221
Category 3

In the first case you have a table layout like Steve posted consisting
of two tables. In the second case also two tables, but with a different
structu

Category: ID (PK, Autonumber), Denomination (Text, not NULL) etc.
CategoryStructu ID (PK, FK, Long), ParentID (FK, Long, not NULL)

There is a 1:1 relationship between Category.ID and
CategoryStructure.ID. Root (top) categories are

SELECT *
FROM Category
WHERE ID NOT IN (SELECT ID FROM CategoryStructure)

This layout should be used, when your categories are changing often.

If your categories are invariant, then you may merge these two tables:

Category: ID (PK, Autonumber), ParentID (FK, Long),
Denomination (Text, not NULL) etc.

ParentID should be NULL for root/top level categories:

SELECT *
FROM Category
WHERE IsNull(ParentID)



mfG
-- stefan --
  #4  
Old December 24th, 2008, 07:00 PM posted to microsoft.public.access.tablesdbdesign
mailmanny
external usenet poster
 
Posts: 1
Default Recursive Table

Okay, what does your categories/subcategories look like:

b)


Category 1


Category 11


Category 111
Category 112
Category 2


Category 21
Category 22


Category 221


Category 3
Category 31
Category 311
Category 3111


My categories look like option b
they do not change often but i have a varying number of subcategories form 1
to 4.

The table that I have now looks like

tblCategories:
ID (PK, AutoNumber)
CatName ( text, Not Null)
ParentCatID (Int, FK)


Kind of like what you posted.

If your categories are invariant, then you may merge these two tables:


Category: ID (PK, Autonumber), ParentID (FK, Long),
Denomination (Text, not NULL) etc.


ParentID should be NULL for root/top level categories:


SELECT *
FROM Category
WHERE IsNull(ParentID)



My only reamaing question is how to take that flat table and us it in a
hierachial way with like a treeview maybee.

I have done it in ASP.NET with C# for a website to view products by
selecting the categories and opening nodes, and when a child node is selected
it populates a view with the products that fit that subcategory. But i cant
figure out how to use that to add products. i want to be able to select the
lowest level of any given category and have that sub(sub(sub))category ID
stored in the products table.

  #5  
Old December 25th, 2008, 11:54 AM posted to microsoft.public.access.tablesdbdesign
Stefan Hoffmann
external usenet poster
 
Posts: 991
Default Recursive Table

hi,

mailmanny wrote:
I have done it in ASP.NET with C# for a website to view products by
selecting the categories and opening nodes, and when a child node is selected
it populates a view with the products that fit that subcategory. But i cant
figure out how to use that to add products. i want to be able to select the
lowest level of any given category and have that sub(sub(sub))category ID
stored in the products table.

So, when you select a category, you want to select all products assigned
to this category or assigned to its subcategories?

In this case, you need either a helper function, as Access/Jet has no
recursive type of query or you need another way of storing your tree:

Nested Sets

http://www.mvps.org/access/queries/qry0023.htm


mfG
-- stefan --
 




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


All times are GMT +1. The time now is 12:06 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.