In: Computer Science
National Artists Association (NAA) maintains a small database to track painters, paintings, and galleries. A painting is created by a particular artist and then exhibited in a particular gallery. A gallery can exhibit many paintings, but each painting can be exhibited in only one gallery. Similarly, a painting is created by a single painter, but each painter can create many paintings. Create a database implementation of the statements above using SQL.
Following are the table in the database :
We have following constraint type :
1. Primary key
2. Foreign key
3. Check condition
4. NOT NULL
5. UNIQUE
Constraints and datatypes for the table are given below:
Table : PAINTING
| 
 Column_name  | 
 Data Type  | 
 Contraint_type  | 
| 
 PAINTING_ID  | 
 INT  | 
 PRIMARY KEY  | 
| 
 TITLE  | 
 VARCHAR(50)  | 
 NOT NULL  | 
| 
 PAINTING_COST  | 
 INT  | 
 NOT NULL (CHECK PAINTING_COST >0 )  | 
| 
 ARTIST_ID  | 
 INT  | 
 FOREIGN KEY (references from ARTIST table)  | 
| 
 GALLERY_ID  | 
 INT  | 
 FOREIGN KEY (references from GALLERY table)  | 
Table : LOCATION
| 
 Column_name  | 
 Data Type  | 
 Contraint_type  | 
| 
 LOCATION_ID  | 
 INT  | 
 PRIMARY KEY  | 
| 
 LOCATION_NAME  | 
 VARCHAR(50)  | 
 NOT NULL  | 
Table : GALLERY
| 
 Column_name  | 
 Data Type  | 
 Contraint_type  | 
| 
 GALLERY_ID  | 
 INT  | 
 PRIMARY KEY  | 
| 
 GALLERY_NAME  | 
 VARCHAR(50)  | 
 NOT NULL  | 
| 
 LOCATION_ID  | 
 INT  | 
 FOREIGN KEY (references from LOCATION table)  | 
| 
 EXHIBITION_ID  | 
 INT  | 
 FOREIGN KEY (references from EXHIBITION table)  | 
Table : ARTIST
| 
 Column_name  | 
 Data Type  | 
 Contraint_type  | 
| 
 ARTIST_ID  | 
 INT  | 
 PRIMARY KEY  | 
| 
 ARTIST_NAME  | 
 VARCHAR(50)  | 
 NOT NULL  | 
| 
 ADDRESS  | 
 VARCHAR(50)  | 
 NOT NULL  | 
| 
 PHONE_NO  | 
 INT  | 
 NOT NULL, CHECK(PHONE_NO > 0)  | 
| 
 EMAIL_ID  | 
 VARCHAR(50)  | 
 NOT NULL,UNIQUE,CHECK(EMAIL_ID LIKE ‘%_@__%.__%’)  | 
Table : EXHIBITION
| 
 Column_name  | 
 Data Type  | 
 Contraint_type  | 
| 
 EXHIBITION_ID  | 
 INT  | 
 PRIMARY KEY  | 
| 
 EXHIBITION_START_DATE  | 
 DATE  | 
 NOT NULL  | 
| 
 EXHIBITION_END_DATE  | 
 DATE  | 
 NOT NULL  | 
ER DIAGRAM :

In order to create the above tables in database following are the SQL statements :
TABLE : LOCATION
CREATE TABLE LOCATION (LOCATION_ID INT PRIMARY KEY, LOCATION_NAME VARCHAR(50) NOT NULL)
TABLE : EXHIBITION
CREATE TABLE EXHIBITION(EXHIBITION_ID INT PRIMARY KEY, EXHIBITION_START_DATE DATE NOT NULL, EXHIBITION_END_DATE DATE NOT NULL)
TABLE : GALLERY
CREATE TABLE GALLERY (GALLERY_ID INT PRIMARY KEY, GALLERY_NAME VARCHAR(50) NOT NULL, FOREIGN KEY (LOCATION_ID) REFERENCES LOCATION (LOCATION_ID), FOREIGN KEY(EXHIBITION_ID) REFERENCES EXHIBITION(EXHIBITION_ID))
TABLE : ARTIST
CREATE TABLE ARTIST (ARTIST_ID INT PRIMARY KEY, ARTIST_NAME VARCHAR(50) NOT NULL,ADDRESS VARCHAR(50) NOT NULL,PHONE_NO INT NOT NULL,EMAIL_ID VARCHAR(50) NOT NULL, CHECK(PHONE_NO > 0), CHECK(EMAIL_ID LIKE ‘%_@__%.__%’),UNIQUE(EMAIL_ID))
TABLE : PAINTING
CREATE TABLE PAINTING (PAINTING_ID INT PRIMARY KEY, TITLE VARCHAR(50) NOT NULL,PAINTING_COST INT CHECK(PAINTING_COST > 0), ARTIST_ID INT, GALLERY_ID INT,   FOREIGN KEY (ARTIST_ID) REFERENCES ARTIST(ARTIST_ID), FOREIGN KEY (GALLERY_ID) REFERENCES GALLERY(GALLERY_ID))