[OpenSER-Devel] Defining MySQL foreign key constraint

Mircea Amarascu mircea at ag-projects.com
Thu Jul 12 16:03:20 CEST 2007


Hello Henning,

1. Yes, this worked, however I saw a problem (maybe I'm doing something 
wrong):

I have the following XML description of my table:

<table id="my_table" xmlns:db="http://docbook.org/ns/docbook">
    <name>my_table</name>
    <version>2</version>
    <type db="mysql">&MYSQL_TABLE_TYPE;</type>

   ....

    <index>
        <name>diversion_subscriber_id_exists</name>
        <colref linkend="subscriber_id"/>
    </index>
   
    <column>
        <null/>
        <type db="mysql">CONSTRAINT `my_table_subscriber_id_exists` 
FOREIGN KEY
          (`subscriber_id`) REFERENCES `subscriber` (`id`) ON DELETE CASCADE
        </type>
    </column>

</table>

The sql script for MySQL is generated correctly, however I receive this 
error for postgres and dbtext:

ERROR: Table: my_table, column:  - unsupported column type: CONSTRAINT 
`my_table_subscriber_id_exists` FOREIGN KEY (`subscriber_id`) REFERENCES 
`subscriber` (`id`) ON DELETE CASCADE.

My impression was that the column should have been ignored by postgres 
and dbtext, because of the db="mysql" attribute.

2. This second issue is not related to the first one:

The MySQL tables are created with Type=MyISAM|InnoDB, instead of 
ENGINE=MyISAM|InnoDB, the result being a warning from MySQL:

| Warning | 1287 | 'TYPE=storage_engine' is deprecated; use 
'ENGINE=storage_engine' instead

MySQL documentation says:

The ENGINE and TYPE options specify the storage engine for the table. 
ENGINE was added in MySQL 4.0.18 (for 4.0) and 4.1.2 (for 4.1). It is 
the preferred option name as of those versions, and TYPE has become 
deprecated. TYPE is supported throughout the 4.x series, but likely will 
be removed in the future.

so maybe we could also change TYPE to ENGINE, if everybody is fine with 
it (there aren't people who use older versions of MySQL).


Thanks.



Henning Westerholt wrote:
> On Wednesday 11 July 2007, Mircea Amarascu wrote:
>   
>> Hello,
>>
>> I've written an OpenSER module that uses tables with the following
>> structure:
>>
>> CREATE TABLE `my_table` (
>> [..]
>>   CONSTRAINT `my_table_subscriber_id_exists` FOREIGN KEY
>> (`subscriber_id`) REFERENCES `subscriber` (`id`) ON DELETE CASCADE
>> ) ENGINE=InnoDB
>>
>> they link to the subscriber table using a foreign key constraint.
>>
>> I'd like to ask how can I express this structure in DB schema's XML
>> format, because I haven't found any example of something similar. Can
>> you give me an answer, or point me to the appropriate documentation or
>> references ?
>>     
>
> Hello Mircea,
>
> foreign keys constraints are unfortunaly not supported at the moment. Most 
> people using MyISAM because of performance reasons, and there are also not 
> available in dbtext. In oder to support this you could extend the XSL scripts 
> to generate this statements. 
>
> You could use the following statement in your xml definition to create the 
> table with CONSTRAINTs:
>
> column>
>   <type db="mysql">CONSTRAINT `my_table_subscriber_id_exists` FOREIGN KEY    
>   (`subscriber_id`) REFERENCES `subscriber` (`id`) ON DELETE CASCADE</type>
> </column>
>
> This uses the 'standard' column definition and will simply copy the given SQL 
> code into the generated table.
>
> Does this work for you?
>
> Henning
>   




More information about the Devel mailing list