Joseph Morgan - asks HOW TO work with Foreign Keys?

Sergey Pashkov sergey_pashkov at valentina-db.com
Sun Oct 13 11:52:52 CDT 2013


It is better, as Ruslan has said before, to use sequences with Foreign Keys.

More complete example with this approach will be:

CREATE TABLE "Invoices"(
        "InvoiceDate" DATE,
        "rowID" SERIAL32,
        PRIMARY KEY( "rowID" ) );

CREATE TABLE "InvoiceItems"(
        "InvoiceItemName" VARCHAR( 255 ),
        "InvoiceKey" LONG,
        "rowID" SERIAL32,
        PRIMARY KEY( "rowID" ) );

ALTER TABLE "InvoiceItems" ADD CONSTRAINT "lnk_InvoiceItems_Invoices"
FOREIGN KEY( "InvoiceKey" )
REFERENCES "Invoices" ( "rowID" )
ON DELETE RESTRICT
ON UPDATE SET DEFAULT;


Field of SERIAL type creates own sequence automatically.

-----
RecIDs works naturally with ObjectPtr kind of links.

An equivalent example, which uses RecID-ObjectPtr approach looks like:

CREATE TABLE "Invoices"(
        "InvoiceDate" DATE );

CREATE TABLE "InvoiceItems"(
"InvoiceItemName" VARCHAR( 255 ),
"InvoicePtr" OBJECTPTR INDEXED );

-- CREATE LINK "lnk_InvoiceItems_Invoices" ---------------------
ALTER TABLE "InvoiceItems"
MODIFY "InvoicePtr"
OBJECTPTR CONSTRAINT "lnk_InvoiceItems_Invoices"
REFERENCES "Invoices"
ON DELETE RESTRICT
INDEXED;
-- -------------------------------------------------------------

Best regards,
Sergey Pashkov


On Sun, Oct 13, 2013 at 7:18 PM, Sergey Pashkov <
sergey_pashkov at valentina-db.com> wrote:

> Hello, Joseph,
>
> You have to define either Primary Key or Unique constraint in the parent
> table before a Foreign Key creation.
>
> So to get the last query working, you can declare structure of the second
> table:
> CREATE TABLE "InvoiceItems"(
>         "InvoiceKey" ULONG *UNIQUE*,
>         "rowID" ULONG METHOD ( 'RecID' ) );
>
> Or just make rowID method unique via the Property Inspector.
>
> ------------------------------------
> But looking at the names of tables, I think you wanted to create a db
> schema,
> where each row in InvoiceItems points to one parent row in Invoices1 table:
>
>
> CREATE TABLE "Invoices1"(
>         "InvoiceDate" DATE,
>         "field1" ULONG,
>         "rowID" ULONG METHOD ( 'RecID' ) *UNIQUE* );
>
>
> CREATE TABLE "InvoiceItems"(
>         "InvoiceKey" ULONG,
>         "rowID" ULONG METHOD ( 'RecID' ) );
>
> -- CREATE LINK "lnk_InvoiceItems_Invoices12" -------------------
> ALTER TABLE "InvoiceItems" ADD CONSTRAINT "lnk_InvoiceItems_Invoices12"
> FOREIGN KEY( "InvoiceKey" )
> REFERENCES "Invoices1" ( "rowID" )
>  ON DELETE RESTRICT
> ON UPDATE SET DEFAULT;
> -- -------------------------------------------------------------
>
> Best regards,
> Sergey Pashkov
>
>
>
> On Sun, Oct 13, 2013 at 6:47 PM, Ruslan Zasukhin <
> ruslan_zasukhin at valentina-db.com> wrote:
>
>> On 10/13/13 5:38 PM, "Joseph Morgan" <joseph at checkos.com> wrote:
>>
>> Hi Joseph,
>>
>> > I tried to create the link in Vstudio.
>> >
>> > Two Tables as example:
>> >
>> > CREATE TABLE "Invoices1"(
>> > "InvoiceDate" DATE,
>> > "field1" ULONG,
>> > "rowID" ULONG METHOD ( 'RecID' ) );
>> >
>> >
>> > CREATE TABLE "InvoiceItems"(
>> > "InvoiceKey" ULONG,
>> > "rowID" ULONG METHOD ( 'RecID' ) );
>>
>> Hi Joseph,
>>
>> For FK-links, I will recommend use not CREATE LINK command,
>> But something standard what have all other dbs.
>>
>> Example:
>>        http://www.w3schools.com/sql/sql_foreignkey.asp
>>
>>
>>
>>
>> CREATE TABLE "InvoiceItems"(
>>  "InvoiceKey" ULONG FOREIGN KEY REFERENCES Persons(rowID),
>>   "rowID" ULONG METHOD ( 'RecID' )
>> );
>>
>>
>>
>> ===================
>> Important notes:
>>
>> **  If you want true ROWID, you can use new in 5.0 feature
>>   SEQUENCES, like in Postgre
>>
>>
>> ** if it is okay to use RecID itself, then you may want use
>>        RecID-ObjectPtr   combination.
>>
>> It is more simple and more effective that FK-link.
>>
>>
>>
>> --
>> Best regards,
>>
>> Ruslan Zasukhin
>> VP Engineering and New Technology
>> Paradigma Software, Inc
>>
>> Valentina - Joining Worlds of Information
>> http://www.paradigmasoft.com
>>
>> [I feel the need: the need for speed]
>>
>>
>> _______________________________________________
>> Valentina mailing list
>> Valentina at lists.macserve.net
>> http://lists.macserve.net/mailman/listinfo/valentina
>>
>>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macserve.net/pipermail/valentina/attachments/20131013/c309af26/attachment-0001.html>


More information about the Valentina mailing list