I'd recommend a column of type SET.

Read about it here: http://www.mysql.com/doc/en/SET.html

Basically, if your list of product types is static, this may be a good bet.  The SET 
type can store any combination of 64 members,
stored as bits.
To list all items int a product type, you might use something similar to

SELECT * FROM products WHERE FIND_IN_SET('$mytype', type)>0;

I doubt that an index would be used at all -- but if you're reading 99% of the records 
anyway, that's irrelevant.

Nick


----- Original Message -----
From: "Ken Easson" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Monday, February 03, 2003 10:07 PM
Subject: best way to optimize a table with many to few relationship.


> hello,
>
> I have a question about database structure and optimization.
>
> I have a shopping cart where several items can fall into several of many categories, 
>but each item can also be several of a few
product types.
> my product type is limited to aprox. 5 product types. Further 99% of items will be 
>in all 5 product types.
>
> I am trying to figure out the best way to optimize the relation ship between product 
>type and product.
>
> if i create a product type table and then list each product in this type, i will 
>have close to 5 times the number of rows as i
do number of products. since almost all products will be in all product type lists. 
Conversely i can do an "exceptions table"
where a table lists the product types that a product is NOT in. This of course add's a 
degree of difficulty if a new product type
is added.
>
> the other way of solving my problem is to add a "types" column to my product table, 
>and adding the product type as a list,
however this seems strangely NOT relational database savy:
> SELECT * FROM products WHERE type IN ($mytype);
>
> OR since i have such a small number of product types, does it make sense to create a 
>table which contains each product id, with
a column for each product type with a boolean field type? If this is recommended, how 
is this table optimized?
>
> here is a sample of my data to illustrate where i'm coming from:
>
> item: clown
> categories: humorous, figure,
> product: pad, case, appliance
>
> item: robot-boy
> categories: si-fi, figure, abstract, robots, boys
> product: pad, case, appliance
>
> item: robot-girl
> categories: si-fi, figure, abstract, robots, girls
> product: pad, case, appliance
>
> item: dragonship
> categories: si-fi, animals, fantasy, space
> product: pad, case
>
> SELECT QUERY MYSQL
>
> ken easson
> justken.net
> [EMAIL PROTECTED]
> justken web programming and technical support.
>
>
> ---------------------------------------------------------------------
> Before posting, please check:
>    http://www.mysql.com/manual.php   (the manual)
>    http://lists.mysql.com/           (the list archive)
>
> To request this thread, e-mail <[EMAIL PROTECTED]>
> To unsubscribe, e-mail <[EMAIL PROTECTED]>
> Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php


---------------------------------------------------------------------
Before posting, please check:
   http://www.mysql.com/manual.php   (the manual)
   http://lists.mysql.com/           (the list archive)

To request this thread, e-mail <[EMAIL PROTECTED]>
To unsubscribe, e-mail <[EMAIL PROTECTED]>
Trouble unsubscribing? Try: http://lists.mysql.com/php/unsubscribe.php

Reply via email to