[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]

Re: gEDA-user: Database on symbols, footprints and other (was "Re: gattrib")



Armin Faltl wrote:
Another strange thing with gparts:

in 'sql/mysql/create-basic.sql' one finds:
------------------------ cut ----------------------------
...
CREATE TABLE Symbol (

   SymbolID    INTEGER UNSIGNED  NOT NULL AUTO_INCREMENT,
   SymbolPath  VARCHAR(500)      NOT NULL,
   DeviceID    INTEGER UNSIGNED  NOT NULL,

   PRIMARY KEY ( SymbolID ),
   FOREIGN KEY ( DeviceID ) REFERENCES Device,
   UNIQUE ( SymbolPath )
   );


-- Create a table for symbol details (comments).
--
-- Each symbol may have many comments.
--
CREATE TABLE SymbolDetail (

   SymbolID  INTEGER UNSIGNED  NOT NULL AUTO_INCREMENT,
   Detail    VARCHAR(500)      NOT NULL,

   FOREIGN KEY ( SymbolID ) REFERENCES Symbol,
   UNIQUE ( SymbolID, Detail )
   );
...
------------------------ cut -----------------------------

what is the purpose of auto-increment on a foreign key?
Auto-increment would probably be the default behavior, but as it
will break the foreign key constraint this, same as not assigning
anything will prevent creation of that row. Actually it is worse
(at least with PostgreSQL): the autoincrement counter falls
behind, if the default behavior is not used.
It can be assumed, that the SymbolID's from "Symbol" will form a gapless sequence.
If for some reason, the SymbolID gets missed during creation of a
SymbolDetail, the AUTO_INCREMENT will produce an integer
that is probably low, because this is a bug. And this will happily
attach the detail to a random symbol, instead of raising an exception.

Wrong?

Armin
It's not impossible that mysql would quietly ignore an autoincrement attribute for a foreign key. I agree it looks wrong.

Jim.


_______________________________________________
geda-user mailing list
geda-user@xxxxxxxxxxxxxx
http://www.seul.org/cgi-bin/mailman/listinfo/geda-user