Drop Down MenusCSS Drop Down MenuPure CSS Dropdown Menu

PostgreSQL Foreign Key -2

In this tutorial, I will teach you about PostgreSQL foreign key and how to add foreign keys to tables using foreign key constraints.
Parent table:
the table to which the foreign key references is called referenced table or parent table.
Child table:
The table that contains the foreign key is called referencing table or child table. 
  • A foreign key is defined in a table that refers to the primary key of the other table.
  • the number and type of the constrained (Child table) columns need to match the number and type of the (parent table)referenced columns.We say that a foreign key constraint maintains referential integrity between child and parent tables.
  • A table can have more than one foreign key constraint depending on its relationships with other tables.
SYNTAX:
CREATE TABLE PARENT (
  C1 integer PRIMARY KEY,              --->this is the parent table
  C2 integerPRIMARY KEY,
  c3 integer
);

CREATE TABLE CHILD (                  ---->this is the child table         
  a integer PRIMARY KEY,                 
  b integer,
  c integer,    
  FOREIGN KEY (b, c) REFERENCES PARENT (c1, c2)
);

PRACTICAL 1.CREATION OF SIMPLE POSTGRESQL FOREIGN KEY COLUMN CONSTRAINT:
Let’s say we have a table named products1 AND orders1, products1 is a parent table means referenced table and oreders1 is a child table means referencing table
Parent Table(Referenced Table):
CREATE TABLE products1 (
                       product_no integer PRIMARY KEY,
                       name text,
                       price numeric);

postgres=# \d products1
     Table "public.products1"
   Column   |  Type   | Modifiers 
------------+---------+-----------
 product_no | integer | not null
 name       | text    | 
 price      | numeric | 
Indexes:
    "products1_pkey" PRIMARY KEY, btree (product_no)
Child Table(Foreign key Table or Referencing Table):
CREATE TABLE orders1 (
                      order_id integer PRIMARY KEY,
                      product_no integer REFERENCES products1 (product_no),
                      quantity integer);

postgres=# \d orders1 
      Table "public.orders1"
   Column   |  Type   | Modifiers 
------------+---------+-----------
 order_id   | integer | not null
 product_no | integer | 
 quantity   | integer | 
Indexes:
    "orders1_pkey" PRIMARY KEY, btree (order_id)
Foreign-key constraints:
    "orders1_product_no_fkey" FOREIGN KEY (product_no) REFERENCES products1(product_no)
Notice that we use REFERENCES clause to define a foreign key constraint for the orders1 table. It means that product_no  column in the orders1 table references to the product_no column of the products1 table.

PRACTICAL 2.MAKING INSERTION OPERATION ON FOREIGN KEY TABLE:
PostgreSQL Parent(products1) table insertion:
postgres=# insert into products1 values (1,'redmi',1000),(2,'motog4',11000),(3,'samsung edge',18000);
INSERT 0 3

postgres=# insert into products1 values (1,'redmi',1000),(2,'motog4',11000),(3,'samsung edge',18000);
ERROR:  duplicate key value violates unique constraint "products1_pkey"
DETAIL:  Key (product_no)=(1) already exists.

postgres=# insert into products1 values (4,'nokia100',100),(5,'moto apple',110000),(6,'apple8',100000);
INSERT 0 3

postgres=# select * from products1;
 product_no |     name     | price  
------------+--------------+--------
          1 | redmi        |   1000
          2 | motog4       |  11000
          3 | samsung edge |  18000
          4 | nokia100     |    100
          5 | moto apple   | 110000
          6 | apple8       | 100000
(6 rows)
PostgreSQL Child(orders1) table insertion:
postgres=# insert into orders1 values(1,2,10);
INSERT 0 1

postgres=# insert into orders1 values(2,6,10);
INSERT 0 1

postgres=# insert into orders1 values(3,5,10);
INSERT 0 1

postgres=# insert into orders1 values(4,6,80);
INSERT 0 1
postgres=# insert into orders1 values(5,7,80);
ERROR:  insert or update on table "orders1" violates foreign key constraint "orders1_product_no_fkey"
DETAIL:  Key (product_no)=(7) is not present in table "products1".

postgres=# select * from orders1;
 order_id | product_no | quantity 
----------+------------+----------
        1 |          2 |       10
        2 |          6 |       10
        3 |          5 |       10
        4 |          6 |       80
(4 rows)
Note the above error why it throw error means product_no column in products1 table available values are 1,2,3,4,5,6. so this valuse only allowed on product_no column in orders1 table, if you try to insert or upd unrelated(unavailable value product_no column in products1 table) number(like 7...) on product_no column in orders1 table surely you will recieve error.

Comments

Popular posts from this blog

How to Get Table Size, Database Size, Indexes Size, schema Size, Tablespace Size, column Size in PostgreSQL Database

PostgreSQL Pgbadger Installation On Linux

PostgreSQL pgBadger

How to configure Replication Manager (repmgr) ?

Migrating From Oracle to PostgreSQL using ora2pg open source tools