Hi Clemens,

The table user stores info about all users.

But some users have administrator privileges and can register a loan or a devolution in the system.

On the line:
FOREIGN KEY  (id_admin_loan, id_admin_devolution) REFERENCES user (id_user, 
id_user)

The id_admin_loan field is the id_user of a user who has adminstrator privileges and registered a loan of a book.

The id_admin_devolution field is the id_user of a user with administrator privilege and who registered the devolution of a book.

My intention is to register "who" did "what" in the system.

I followed your suggestion and separated the double constraint into two separate single constraint:

FOREIGN KEY(id_admin_loan) REFERENCES user(id_user),

FOREIGN KEY(id_admin_devolution) REFERENCES user(id_user)

and worked fine. :-)

Thank you for the tip.

But I'm curious to understand why the original (double) restriction was generating this error?

Because the other double constraint:

FOREIGN KEY(id_book, copy_number) REFERENCES copy(id_book, copy_number),

do not generate any error.

Thank you very much for your attention.

Markos



Markos wrote:

CREATE TABLE user (
     id_user integer PRIMARY KEY,
     ...
CREATE TABLE loan (
     ...
     FOREIGN KEY(id_admin_loan, id_admin_devolution) REFERENCES user(id_user, 
id_user)

I do not understand what this is trying to accomplish.
Why not two single-column FK constraints?

Error: foreign key mismatch - "loan" referencing "user"

Because there is no unique index on (id_user,id_user).


Regards,
Clemens


Em 30-07-2018 20:42, Markos escreveu:
Hi,

I am a beginner in database and I'm developing a Database (with Tcl/Tk) to control the loans of books in a reading room.

I created a table to register the users:

...

db1 eval {CREATE TABLE user (
                           id_user integer PRIMARY KEY,
                           name text NOT NULL,

                        ...

                        id_admin integer  NOT NULL
                           );}


Then create a table for the books:

db1 eval {CREATE TABLE book (
                           id_book integer PRIMARY KEY,
                           title text NOT NULL,

                    ...
                           subject text NOT NULL,
                           UNIQUE (id_book, title));}


And another table for each copy of the books, because we can have different copies of a book:

db1 eval {CREATE TABLE copy (
                           id_copy integer PRIMARY KEY,
                           id_book integer NOT NULL,
                           copy_number integer NOT NULL,
                           ...
                           UNIQUE (id_book, copy_number),
                           FOREIGN KEY(id_book) REFERENCES book(id_book)
                           );}


And finally a table to register the loans with many FOREIGN KEYS:

db1 eval {CREATE TABLE loan (
                           id_loan integer PRIMARY KEY,
                           id_user integer NOT NULL,
                           id_book integer NOT NULL,
                           copy_number integer NOT NULL,
                           loan_date integer NOT NULL,
                           devolution_date integer NOT NULL,
                           ...
                           UNIQUE (id_user, id_book, copy_number, loan_date),                            FOREIGN KEY(id_book, copy_number) REFERENCES copy(id_book, copy_number),
                           FOREIGN KEY(id_user) REFERENCES user(id_user),
                           FOREIGN KEY(id_admin_loan, id_admin_devolution) REFERENCES user(id_user, id_user));}

But the command to insert a new loan return an error.

The command:

db1 eval "INSERT INTO loan (id_user, id_book, copy_number, loan_date, devolution_date, ...) VALUES (1, 2, 1, 1532919600, 1514772000, ...)"

The error:

Error: foreign key mismatch - "loan" referencing "user"

foreign key mismatch - "loan" referencing "user"
foreign key mismatch - "loan" referencing "user"
    while executing
"db1 eval "INSERT INTO $table_name ($field_list) VALUES ($value_list)""

The insert command works well for insertion into the user, book, and copy tables.

I'm just having error to insert into the loan table.

I can't find the reason for the error.

Any tip?

Thank you,

Markos


_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

_______________________________________________
sqlite-users mailing list
sqlite-users@mailinglists.sqlite.org
http://mailinglists.sqlite.org/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to