[thelist] function_id

rudy r937 at interlog.com
Mon Mar 24 18:56:33 CST 2003


hi russel

> INSERT INTO categories VALUES (1,'Sportsman','null');
> INSERT INTO categories VALUES (2,'Hunter','1');
> INSERT INTO categories VALUES (3,'FoxHunters','2');
> INSERT INTO categories VALUES (4,'BirdHunters','2');
> INSERT INTO categories VALUES (5,'WabbitHunters','2');
> INSERT INTO categories VALUES (6,'Owner','3');
> INSERT INTO categories VALUES (7,'Breeder','');

no, there are still problems here

the structure is okay, but the data is bad

for one thing, cat_id and parent_cat_id are both numeric,
so you cannot insert those strings into parent_cat_id

the string 'null' is not the same as the reserved word null

you cannot use a zero-length string for a null

and finally, the examples seem wrong, and perhaps it is
just because they are contrived, but it could also be that
the foreign key relationships are not well understood

indented, these relationships look like this --

Sportsman
--Hunter
----FoxHunters
------Owner
----BirdHunters
----WabbitHunters
Breeder

i don't understand why Owner is a subcategory of FoxHunters


> CREATE TABLE persons(
>   personid bigint(12) DEFAULT '0' NOT NULL auto_increment,
>   name varchar(20),
>   catid integer (3)null,
>   parentcatid  integer (3)  null,
>   foreign key (personcat),
>   PRIMARY KEY (sportsmenID)

no, you would not relate a person with catid *and* parentcatid

foreign key personcat and primary key sportsmenid do not exist
in the table -- perhaps some hasty and unedited cuttin & pastin?

i'm sorry to say this, but you have to be 100% precise in order to
achieve results with sql

how many people are you going to record in this table?
i'll bet BIGINT is several orders of magnitude too big


> INSERT INTO persons VALUES (1,'Fred','4');
> INSERT INTO persons VALUES (2,'Walker','6');

number of values does not match number of columns


> *? Walker is also a Sportsman, Breeder, Owner,Foxhunter, WabbitHunter
> *How is this coded?

you are describing a many-to-many relationship

each category can contain more than one person, and each person
can belong to more than one category

therefore you have to move the person-cat relationship into a separate, new
table

  create table categories
   ( catid  smallint  not null  primary key
   , catname  varchar(100)  not null
   , parentcat  smallint  null
   , foreign key ( parentcat ) references categories ( catid )
   );
  create table persons
   ( personid  smallint  not null  primary key
   , personname  varchar(100)  not null
   );
  create table person_category
   ( personid  smallint  not null
   , catid  smallint  not null
   , primary key ( personid, catid )
   , foreign key ( personid ) references persons ( personid )
   , foreign key ( catid ) references categories ( catid )
   );

rudy



More information about the thelist mailing list