I think I understand. So instead of my queries being centered around the listings table, they will be centered around this new table?
Currently, I pull the records for each category like so: $query = "select l.CatalogNumber, l.PDFLink, l.PDFName, l.MP3Name, l.Title, p.PublisherName, c.ComposerLname, a.ArrangerLname, l.Price, l.Description, l.DiscountID, l.DiscountType, l.DiscountAmount, o.Alias, l.Description from listings l, publishers p, composers c, arrangers a, categories o where l.CategoryID=o.CategoryID and o.Name='".$Category."' and l.PublisherID=p.PublisherID and l.ComposerID=c.ComposerID and l.ArrangerID=a.ArrangerID order by ".$OrderBy; To follow your example, I would add these other fields to the listings_projects table you defined below, and restructure the query around that? Thanks for your insight! -Erich- -----Original Message----- From: [EMAIL PROTECTED] [mailto:[EMAIL PROTECTED] Sent: Wednesday, August 04, 2004 11:51 AM To: [EMAIL PROTECTED] Cc: [EMAIL PROTECTED] Subject: Re: Design Question As posted, your data structure supports two one-to-many relationships, not the one-to-one relationships as you described. You can have multiple Listings per Category and multiple Categories per Group. What it sounds like you have been asked to do is to support a many-to-many relationship. You need to support both multiple Listings per Category and multiple Categories per Listing. As you have it now: Groups (1..*) Categories (1..*) Listings As you need it to be: Groups (1..*) Categories (*..*) Listings To create a (*..*) relationship between two tables, you need a third table. Each entry in this table represents one Listing-Category association (relationship). CREATE TABLE listings_projects ( ListingID bigint not null , CategoryID int , ... any additional fields as needed ... , PRIMARY KEY (ListingID, CategoryID) ) The primary key ensures that at each Listing/Category combination appears only once (no duplicate assignments). I showed you where additional fields can fit into the relation table because sometimes there are facts about relationships that do not fit into either of the tables they relate A recent example in this list was a relation table between chemical compounds and the various plants in which those compounds could be found. A fact that belongs to the *relationship* could be the concentration of that chemical in that plant. That concentration value would not belong to the plants table nor would it belong to the compounds table but does belong to the relationship of plant to compound. Make sense? I have personally used additional fields like those to indicate "deletion". That way "old" values are no longer available for new relationships (in my applications) and my queries won't break as I didn't actually get rid of any information. My "historical" reports still function as the "old" names are still in the system, even if you can't use the the old names for any current purposes. Yours, Shawn Green Database Administrator Unimin Corporation - Spruce Pine "Erich Beyrent" <[EMAIL PROTECTED]> wrote on 08/04/2004 10:35:33 AM: > Hi all, > > I need some advice on a project I have. Basically, I have some tables: > > CREATE TABLE listings ( > ListingID bigint(20) unsigned NOT NULL auto_increment, > CatalogNumber varchar(12) NOT NULL default '', > PDFLink varchar(100) default NULL, > PDFName varchar(80) default NULL, > Title varchar(100) NOT NULL default '', > ComposerID int(11) default NULL, > ArrangerID int(11) default NULL, > PublisherID int(11) default NULL, > Price double(16,2) NOT NULL default '0.00', > DiscountID int(11) default NULL, > Description text, > NewTitles tinyint(1) default NULL, > CategoryID int(11) NOT NULL default '0', > PRIMARY KEY (ListingID) > ) TYPE=MyISAM; > > CREATE TABLE categories ( > CategoryID int(11) NOT NULL auto_increment, > Name varchar(50) NOT NULL default '', > Alias varchar(60) default NULL, > DiscountID int(11) default NULL, > Description text, > GroupID int(11) NOT NULL default '0', > PRIMARY KEY (CategoryID) > ) TYPE=MyISAM; > > CREATE TABLE groups ( > GroupID int(11) NOT NULL auto_increment, > Name varchar(50) default NULL, > DiscountID int(11) default NULL, > PRIMARY KEY (GroupID) > ) TYPE=MyISAM; > > > Currently, there is a one-to-one relationship between listings and > categories, and listings and groups. Now, the customer is requesting > that a listing be included in several categories. I am not quite sure > how to do this. > > My thought was to add a new field to the listings table that would > contain a comma-separated list of CategoryIDs, but something doesn't > feel right about this solution. > > What would be a good approach to this problem? > > -Erich- > > > > -- > MySQL General Mailing List > For list archives: http://lists.mysql.com/mysql > To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED] > -- MySQL General Mailing List For list archives: http://lists.mysql.com/mysql To unsubscribe: http://lists.mysql.com/[EMAIL PROTECTED]