What you're talking about is a many-many relationship, as one product can belong to many categories, and one category can encompass many products.
The best way to implement this is to have a [category] table, a [product] table, and a [categoryproduct] table. The latter table implements the many-many relationship. create table categoryproduct ( categoryid int, productid int, unique key categoryproduct (categoryid, productid) key productcategory (productid, categoryid) ) There's two indecies on the table to allow both forward and reverse lookups when joining tables--find the categories a product belongs to, or find the products for a particular category. On a related note...always design your database to handle all scenarios...designing for 99% will bite you in the arse later when the 1% becomes 1,000 products :) Best regards, Peter <^_^> > -----Original Message----- > From: Ken Easson [mailto:[EMAIL PROTECTED]] > Sent: Monday, February 03, 2003 4:55 PM > To: [EMAIL PROTECTED] > 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 > > At 05:08 AM 2/3/2003 -0800, you wrote: > >From manual: > >LONGBLOB > >A BLOB or TEXT column with a maximum length of > >4294967295 (2^32 - 1) characters > > > >If I insert a 400k file into a longblob, will it > >occupy 400k in actual space on the harddrive, or will > >it occupy the maximum for a longblob? > > > >Is there any difference here between innoDB an MyISAM? > >I read that MyISAM only can handle blobs up to 16 > >mb... > > > >Any thoughts? > >// Michelle > >SQL, Query > > > >__________________________________________________ > >Do you Yahoo!? > >Yahoo! Mail Plus - Powerful. Affordable. Sign up now. > >http://mailplus.yahoo.com > > > >--------------------------------------------------------------------- > >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 > > 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