I need to add constraint Order such that the unique combination of fields exist within another table.
Table: Product
productId PRIMARY KEY
productNumber
and:
Table: Order
clientId FOREIGN KEY
productId FOREIGN KEY
productNumber
dateBorrowed
dateReturned
I have tables Product and Order. productId and productNumber create a unique combination to specify a product as multiple versions. When inserting into Order the unique combination of productId and productNumber must exist within the Product table. Duplicates are allowed as items can be returned and borrowed again. How to create the constraint when creating Order table?
Product :
| ProductId | ProductNumber |
|---|---|
| 123 | 1 |
| 123 | 2 |
| 675 | 1 |
Order :
| clientId | productId | productNumber | dateBorrowed | dateReturned |
|---|---|---|---|---|
| 10 | 123 | 1 | 1979 | 1989 |
| 10 | 123 | 1 | 1990 | 2000 |
| 12 | 675 | 1 | 2022 | 2022 |
| 07 | 123 | 2 | 1982 | 2022 |
CodePudding user response:
The unique combination of fields you describe is in fact the primary key :
CREATE TABLE Product(
productId INTEGER,
productNumber INTEGER,
...
PRIMARY KEY (productId, productNumber)
);
You can reference it in the Order table :
CREATE TABLE "Order"(
...
productId INTEGER,
productNumber INTEGER,
...
FOREIGN KEY(productId, productNumber) REFERENCES Product(productId, productNumber)
);
Please note the Order table name must be quoted, ORDER is a SQLite keyword.
Also foreign keys must be enabled :
PRAGMA foreign_keys = ON;
