Having trouble in Online Movie ticketing database design - sql-server-2008

#J2D8T i have done few changes in my code please tell if its correct also is it properly normalized? thanks in advance.
use [fadi1]
create table Customer (
Cnic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword varchar (30) not null,
email varchar (40) ,
contactno varchar (15) ,
city varchar (30)
);
create table Adimn (
Anic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword varchar (30) not null,
email varchar (40) ,
contactno varchar (15) ,
city varchar (30)
);
create table Movie (
M_id int primary key not null,
name varchar(25) not null,
Mdescription varchar(500) not null,
imagename varchar (100) not null,
Actors varchar (100) not null,
);
create table Venue(
V_id int primary key not null,
V_Name varchar(25) not null,
Maxcapacity int not null,
);
create table Shows (
showid int primary key IDENTITY(1,1) not null,
V_id int not null,
M_id int not null ,
date_time datetime not null unique,
remaining_tickets int not null,
foreign key (v_id) references Venue(v_id),
foreign key (M_id) references Movie(M_id),
);
create table Tickets(
showid int not null,
Seat_no int not null, -- (maxcap-remaining tickets)+1 from capacity table of given pk of that table
T_id int primary key IDENTITY(1,1) not null, --(p.k)
price int not null,
foreign key (showid) references Shows(showid)
);
create table Booking (
showid int not null,
T_id int not null unique,
Cnic varchar(17) not null,
booking_time datetime not null,
foreign key (showid) references Shows(showid),
foreign key (T_id) references Tickets(T_id),
foreign key (Cnic) references Customer(Cnic),
constraint pk_IDBooking primary key(T_id,showid),
);
please inform me as soon as possible because i am not quite far from the deadline :D

At a minimum, there is no password data type in SQL Server. Since you have provided no details about how you're storing data, I converted it to varchar(50).
SQLFiddle
create table Customer (
Cnic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword varchar(50) not null,
email varchar (40) ,
contactno varchar (15) ,
city varchar (30) ,
)
create table Adimn (
Anic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword varchar(50) not null,
email varchar (40) ,
contactno varchar (15) ,
city varchar (30) ,
)
create table Movie (
M_id int not null,
name varchar(25) not null,
Mdescription varchar(500) not null,
imagename varchar (100) not null,
primary key (M_id)
);
create table Actors(
actor_id varchar(25) primary key not null ,
actor varchar(30)not null,
M_id int not null,
Act_role varchar (10)not null,
amountspent int ,
foreign key (M_id) REFERENCES Movie(M_id)
);
create table Venue(
V_id int primary key not null,
M_id int not null,--F.k
V_Name varchar(25)not null
);
create table Capacity(
M_id int not null,
v_id int not null,
date_time varchar (15) not null,
remaining_tickets int not null,
max_capacity int not null,
primary key (M_id, v_id ,date_time )
);
create table Booking (
v_id int not null, --key
T_id int not null,
M_id int not null,--key
Cnic varchar(30) primary key not null,--(p.k))
date_time varchar (15) not null, -- (f.k )
);
create table Tickets(
Seat_no int primary key not null, -- (p.k))
T_id int not null,
M_id int not null, --(f.k)
price int not null,
);

I edited the answer to include only the code with some comments hope this solves your problem.
Edit from your original post:
create table Customer (
Cnic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword password not null,
email varchar (40) ,
contactno varchar (15) ,
city varchar (30)
);
create table Adimn (
Anic varchar (17) primary key not null,
name varchar (30) not null,
Cpassword varchar (30) not null, // changed to varchar
email varchar (40) ,
contactno varchar (15) ,
city varchar (30)
);
create table Movie (
M_id int primary key not null,
name varchar(25) not null,
Mdescription varchar(500) not null,
imagename varchar (100) not null
);
create table Actors(
actor_id varchar(25) primary key not null ,
actor varchar(30)not null,
M_id int not null,
Act_role varchar (10)not null,
amountspent int ,
foreign key (M_id) REFERENCES Movie(M_id)
);
create table Venue(
V_id int primary key not null,
M_id int not null,--F.k
V_Name varchar(25) not null,
foreign key (M_id) references Movie(M_id)
);
create table Capacity(
v_id int not null, // FK
M_id int not null unique, //FK
date_time varchar (15) not null unique,
remaining_tickets int not null,
max_capacity int not null,
foreign key (v_id) references Venue(v_id),
foreign key (M_id) references Movie(M_id),
constraint pk_IDCapacity PRIMARY KEY (M_id,v_id,date_time) // this will create composite key
);
create table Tickets(
Seat_no int primary key not null, -- (p.k))
T_id int not null,
M_id int not null, --(f.k)
price int not null,
foreign key (M_id) references Capacity(M_id)
);
create table Booking (
v_id int not null, //FK
T_id int not null, //FK
M_id int not null,//FK
Cnic varchar(30) primary key not null // Will this stil be neccessary
date_time varchar (15) not null, //FK
foreign key (v_id) references Venue(v_id),
foreign key (M_id) references Movie(M_id),
foreign key (date_time) references Capacity(date_time),
foreign key (T_id) references Tickets(T_id),
constraint pk_IDBooking primary key(v_id,M_id,T_id,date_time) //Can be in any order the PK's
);
Could probably be more compacted with normalization but it should work based on the code you have provided.

Related

MySQL v5.7/5.6 Cannot add Foreign Key constraint

I tried putting this through db-fiddle and SQL fiddle Keep getting "Schema Error: Error: ER_CANNOT_ADD_FOREIGN: Cannot add foreign key constraint"
Everything works until I put the last table.
'''
CREATE TABLE User (
User_ID INT NOT NULL,
First_Name VARCHAR(30) NOT NULL,
Last_Name VARCHAR(30) NOT NULL,
Address_1 VARCHAR(100) NOT NULL,
Address_2 VARCHAR(100) NOT NULL,
City VARCHAR(100) NOT NULL,
State VARCHAR(100) NOT NULL,
Zip VARCHAR(25) NOT NULL,
Mobile_Phone VARCHAR(30) NOT NULL,
PRIMARY KEY (User_ID)
);
CREATE TABLE Bagel (
Bagel_ID INT NOT NULL,
Bagel_Name VARCHAR(30) NOT NULL,
Bagel_Description VARCHAR(30) NOT NULL,
Bagel_Price NUMERIC(65,2) NOT NULL,
PRIMARY KEY(Bagel_ID)
);
CREATE TABLE Bagel_Order (
Bagel_Order_ID INT NOT NULL,
User_ID INT NOT NULL,
Order_Date TIMESTAMP,
Delivery_Fee NUMERIC(50 , 2) NOT NULL,
Special_Notes CHAR,
PRIMARY KEY (Bagel_Order_ID),
FOREIGN KEY (User_ID) REFERENCES User (User_ID)
);
CREATE TABLE Bagel_Order_Line_Item (
Bagel_Order_ID INT NOT NULL,
Bagel_ID INT NOT NULL,
Bagel_Quantity INT NOT NULL,
PRIMARY KEY(Bagel_Order_ID, Bagel_ID),
FOREIGN KEY(Bagel_Order_ID) REFERENCES
Bagel_Order_Line_Item(Bagel_Order_ID),
FOREIGN KEY(Bagel_ID) REFERENCES Bagel(Bagel_ID)
);
'''

ERROR IN SQL COMMAND / FOREIGN KEY PROBLEM

I was training to create a table in SQL, but I got this message
The ideia of the code is this one:
/* criando as tabelas */
CREATE TABLE CLIENTES (
IDCLIENTE INT PRIMARY KEY AUTO_INCREMENT,
CLIENTE VARCHAR(10)NOT NULL,
ESTADO CHAR(2) NOT NULL,
SEXO ENUM ('M','F') NOT NULL,
STATUS VARCHAR (10)
);
CREATE TABLE VENDEDORES (
IDVENDEDOR INT PRIMARY KEY AUTO_INCREMENT,
NOME VARCHAR (20) NOT NULL
);
CREATE TABLE PRODUTOS (
IDPRODUTO INT PRIMARY KEY AUTO_INCREMENT,
PRODUTO VARCHAR (20) NOT NULL,
PRECO FLOAT(10,2) NOT NULL
);
CREATE TABLE VENDAS (
IDVENDA INT PRIMARY KEY AUTO_INCREMENT,
TOTAL INT NOT NULL,
ID_VENDEDOR INT ,
FOREIGN KEY (ID_VENDEDOR)
REFERENCES VENDEDORES(IDVENDEDOR)
ID_CLIENTE INT,
FOREIGN KEY (ID_CLIENTE)
REFERENCES CLIENTES(IDCLIENTE)
);
CREATE TABLE ITENS_VENDAS(
ID_VENDA INT NOT NULL,
ID_PRODUTO INT NOT NULL,
FOREIGN KEY ID_VENDA
REFERENCES VENDAS(IDVENDA)
FOREIGN KEY ID_PRODUTO
REFERENCES PRODUTOS(IDPRODUTO)
QUANTIDADE INT NOT NULL,
VALOR_UNITARIO FLOAT(10,2) NOT NULL,
VALOR_TOTAL FLOAT(10,2) NOT NULL,
DESCONTO FLOAT(10,2) NOT NULL
);
I was creating that from this idea of this flowchart:
I understand that I'm making a mistake in the foreign key part
but i can't understand what is wrong.
P.S: I'am new at programing in sql.
You have some syntax error
CREATE TABLE CLIENTES (
IDCLIENTE INT PRIMARY KEY AUTO_INCREMENT,
CLIENTE VARCHAR(10)NOT NULL,
ESTADO CHAR(2) NOT NULL,
SEXO ENUM ('M','F') NOT NULL,
STATUS VARCHAR (10)
);
✓
CREATE TABLE VENDEDORES (
IDVENDEDOR INT PRIMARY KEY AUTO_INCREMENT,
NOME VARCHAR (20) NOT NULL
);
✓
CREATE TABLE PRODUTOS (
IDPRODUTO INT PRIMARY KEY AUTO_INCREMENT,
PRODUTO VARCHAR (20) NOT NULL,
PRECO FLOAT(10,2) NOT NULL
);
✓
CREATE TABLE VENDAS (
IDVENDA INT PRIMARY KEY AUTO_INCREMENT,
TOTAL INT NOT NULL,
ID_VENDEDOR INT ,
FOREIGN KEY (ID_VENDEDOR)
REFERENCES VENDEDORES(IDVENDEDOR),
ID_CLIENTE INT,
FOREIGN KEY (ID_CLIENTE)
REFERENCES CLIENTES(IDCLIENTE)
);
✓
CREATE TABLE ITENS_VENDAS(
ID_VENDA INT NOT NULL,
ID_PRODUTO INT NOT NULL,
FOREIGN KEY (ID_VENDA)
REFERENCES VENDAS(IDVENDA),
FOREIGN KEY (ID_PRODUTO)
REFERENCES PRODUTOS(IDPRODUTO),
QUANTIDADE INT NOT NULL,
VALOR_UNITARIO FLOAT(10,2) NOT NULL,
VALOR_TOTAL FLOAT(10,2) NOT NULL,
DESCONTO FLOAT(10,2) NOT NULL
);
✓
db<>fiddle here

"PropertyID does not exist in the table

Struggling to see what the issue is with adding a foreign key to the Agents table. I'm getting the error "PropertyID does not exist in the table". Here is the relevant code:
CREATE TABLE Properties (
PropertyID INT(8),
Address VARCHAR(50) NOT NULL,
Level TINYINT(1) NOT NULL,
PropertyValue INT(10) NOT NULL,
CONSTRAINT PRIMARY KEY (PropertyID)
);
CREATE TABLE Agents (
AgentID INT(8) AUTO_INCREMENT,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
PropertiesManaged VARCHAR (50) NOT NULL,
PhoneNumber VARCHAR (12),
CONSTRAINT PRIMARY KEY (AgentID),
CONSTRAINT PropertiesManaged FOREIGN KEY (PropertyID) REFERENCES Properties (PropertyID)
);
You have to define the column:
CREATE TABLE Agents (
AgentID INT(8) AUTO_INCREMENT,
FirstName VARCHAR(50) NOT NULL,
LastName VARCHAR(50) NOT NULL,
PropertiesManaged VARCHAR (50) NOT NULL,
PhoneNumber VARCHAR (12),
PropertyId INT(8),
----^
CONSTRAINT PRIMARY KEY (AgentID),
CONSTRAINT PropertiesManaged FOREIGN KEY (PropertyID) REFERENCES Properties (PropertyID)
);

I cannot create the database GradeBook with the foreign key. When I try to add it I get error1046: choose database

CREATE SCHEMA GRADEBOOK;
CREATE TABLE GRADEBOOK.PERSON
(PERSON_ID INT NOT NULL,
Fname varchar(15) NOT NULL,
Minit varchar (1),
Lname varchar(15) NOT NULL,
B_date date NOT NULL,
SEX varchar(1) NOT NULL,
ADDRESS varchar(50) NOT NULL,
TELEPHONE VARCHAR(12),
STATUS varchar(10) NOT NULL,
PRIMARY KEY (PERSON_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.STUDENT
(STUDENT_ID INT NOT NULL,
SUBJECT_ID VARCHAR (30) NOT NULL,
PRIMARY KEY (STUDENT_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.ALUMNUS
(STUDENT_ID INT NOT NULL,
GRAD_YEAR date NOT NULL,
PRIMARY KEY(STUDENT_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.SUBJECT
(SUBJECT_ID VARCHAR (30) NOT NULL,
SUBJECT_NAME VARCHAR (20) NOT NULL,
CLASS_ID VARCHAR (20) NOT NULL,
PRIMARY KEY (SUBJECT_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.HOUSE
(HOUSE_ID INT NOT NULL,
HOUSE_NAME VARCHAR (20) NOT NULL,
HOUSE_COLOR VARCHAR (20) NOT NULL,
PRIMARY KEY (HOUSE_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.CLUB
(CLUB_ID INT auto_increment NOT NULL,
CLUB_name varchar(20) NOT NULL,
PRIMARY KEY (CLUB_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.HOMEROOM
(HOMEROOM_ID VARCHAR(20) NOT NULL,
CLASS_ID VARCHAR(20) NOT NULL,
PRIMARY KEY( HOMEROOM_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.CLASS
(CLASS_ID VARCHAR(20) NOT NULL,
CLASS_name VARCHAR(20) NOT NULL,
HOMEROOM_ID VARCHAR(20) NOT NULL,
PRIMARY KEY (CLASS_ID))
ENGINE=INNODB;
CREATE TABLE GRADEBOOK.TEACHER
(TEACHER_ID INT NOT NULL,
HOOMROOM VARCHAR(20) NOT NULL,
SUBJECT_ID VARCHAR(20) NOT NULL,
YEAR INT NOT NULL,
TERM VARCHAR(20) NOT NULL,
PRIMARY KEY(TEACHER_ID))
ENGINE=INNODB;

Cannot Create Table

I am using this SQL query to create a table but does gives error in my REFRENCES AT line 13. This is my query
CREATE TABLE ITEM (
ID INT NOT NULL,
TYPE VARCHAR (32) NOT NULL,
DESCRIPTION VARCHAR (64) NOT NULL,
SIZE FLOAT NOT NULL,
SIZE_TYPE VARCHAR (4) NOT NULL,
MANUFACTURE VARCHAR (16) NOT NULL,
SECTION VARCHAR (16) NOT NULL,
PRICE FLOAT NOT NULL,
LEVEL INT(1) NOT NULL,
AISLE_ID INT(11) NOT NULL,
PRIMARY KEY (ID),
FOREIGN KEY (AISLE_ID),
REFERENCES aisle(AISLE_ID)
);
CREATE TABLE ITEM (
ID INT NOT NULL,
TYPE VARCHAR (32) NOT NULL,
DESCRIPTION VARCHAR (64) NOT NULL,
SIZE FLOAT NOT NULL,
SIZE_TYPE VARCHAR (4) NOT NULL,
MANUFACTURE VARCHAR (16) NOT NULL,
SECTION VARCHAR (16) NOT NULL,
PRICE FLOAT NOT NULL,
LEVEL INT NOT NULL,
AISLE_ID INT NOT NULL
PRIMARY KEY (ID) ,
FOREIGN KEY (AISLE_ID) REFERENCES aisle(AISLE_ID)
)
FOREIGN KEY (AISLE_ID),
REFERENCES aisle(AISLE_ID)
Is wrong and should be:
FOREIGN KEY (AISLE_ID) REFERENCES aisle(AISLE_ID)