i was playing around with ideas below,
so they may be worthless chatter :-)

what i was 
thinking "I'll just assume the wine world is not
wildly un-uniform..." and see where that gets me... :-)
and "wine is just an object..."

but the wine has many grape varieties sounds a hell 
of a lot like "one to many" in sql


thanks 

Jim

===============================start chatter
n = null
anything else = not null

all attributes analysis
                a1      a2      a3      a4      a5      a6      a7
wine1           x       n       x       n       x       n       x
wine2           y       x       x       n       n       x       n
wine3           z       x       x       x       x       n       n

8 nulls


common attributes table <parent>
                ID      a1      a3      
wine            1       x       x
wine            2       y       x
wine            3       z       x

special attributes table 1 <child0>

                ID      a5      a7
wine            1       x       x
wine            3       x       n


special attributes table 2 <child1>

                ID      a2      a6
wine            2       x       x
wine            3       x       n

special attributes table 3 <child2>

                ID      a4
wine            3       x

2 nulls

=======================end chatter
-----Original Message-----
From: Michael T. Babcock [mailto:[EMAIL PROTECTED]]
Sent: Thursday, January 09, 2003 6:09 PM
To: Colaluca, Brian
Cc: [EMAIL PROTECTED]
Subject: Re: MySQL Database Design


Colaluca, Brian wrote:

>I have come to a brick wall on one facet of my design, however.  I've come
>to understand that having a lot of NULLs in your database may be a sign of a
>poor design.  And yet I'm having a problem reconciling this with the wildly
>un-uniform world of wines from around the world.  For instance, I would like
>to have a table called "GrapeVariety," and have the variety_id be a primary
>key.  Another table would be "Wine."  And yet, one wine could have one type
>of grape or more. 
>  
>

Just an idea ... to get your head spinning (and some sample queries):

Wine
-----
ID int unsigned not null auto_increment primary key,
Name ...
Winery ...

Grapes
-----
ID int unsigned not null auto_increment primary key,
Name ...
Vineyard? ...

GrapesInWine
-----
WineID int unsigned not null,
GrapesID int unsigned not null,
Percentage int unsigned not null

... where Percentage is between 0 and 100.

Then you can, to insert a wine named "Foo" with 50% of each "Grape1" and 
"Grape2":

INSERT INTO Wine (Name) VALUES ("Foo");
SELECT @WinesID := last_insert_id();            # I'm using server 
variables here for the sake of demo ...
INSERT INTO Grapes (Name) VALUES ("Grape1");
SELECT @GrapesID := last_insert_id();
INSERT INTO GrapesInWine (WineID, GrapesID, Percent) VALUES (@WinesID, 
@GrapesID, 50);
INSERT INTO Grapes (Name) VALUES ("Grape2");
SELECT @GrapesID := last_insert_id();
INSERT INTO GrapesInWine (WineID, GrapesID, Percent) VALUES (@WineID, 
@GrapesID, 50);

Then, to find out what's in the wine named "Foo":

SELECT * FROM Grapes
    LEFT JOIN GrapesInWine
           ON Grapes.ID = GrapesID
    LEFT JOIN Wine
           ON WinesID = Wine.ID
        WHERE Wine.Name = "Foo";

Or, to find the amounts of "Grape1" in all wines:

SELECT * FROM Wine
    LEFT JOIN GrapesInWine
           ON WineID = Wine.ID
    LEFT JOIN Grapes
           ON Grapes.ID = GrapesID
        WHERE Grapes.Name = "Grape1";

-- 
Michael T. Babcock
C.T.O., FibreSpeed Ltd.
http://www.fibrespeed.net/~mbabcock



---------------------------------------------------------------------
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