P1
Answer
Task 1: Normalize the Table
Split into 4 tables to eliminate redundancy:
1. Projects
(`Project_code`, Project_name, Project_manager, Project_budget)
2. Departments
(`Department_id`, Department_name)
3. Employees
(`Employee_id`, Employee_name, Department_id, Hourly_rate)
4. Project_Employees (Junction Table)
(`Project_code`, `Employee_id`)
Task 2: Create Database & Tables
CREATE DATABASE ProjectManagement;
USE ProjectManagement;
CREATE TABLE Departments (
Department_id INT IDENTITY(1,1) PRIMARY KEY,
Department_name VARCHAR(50) NOT NULL
);
CREATE TABLE Projects (
Project_code VARCHAR(10) PRIMARY KEY,
Project_name VARCHAR(50) NOT NULL,
Project_manager VARCHAR(50) NOT NULL,
Project_budget DECIMAL(15,2) NOT NULL
);
CREATE TABLE Employees (
Employee_id INT IDENTITY(1,1) PRIMARY KEY,
Employee_name VARCHAR(50) NOT NULL,
Department_id INT FOREIGN KEY REFERENCES Departments(Department_id),
Hourly_rate DECIMAL(5,2) NOT NULL
);
CREATE TABLE Project_Employees (
Project_code VARCHAR(10) FOREIGN KEY REFERENCES Projects(Project_code),
Employee_id INT FOREIGN KEY REFERENCES Employees(Employee_id),
);
Task 3: Create Relationships
Relationships are established via foreign keys:
- `Employees.Department_id` → `Departments.Department_id`
- `Project_Employees.Project_code` → `Projects.Project_code`
- `Project_Employees.Employee_id` → `Employees.Employee_id`
Task 4: Insert Sample Data
-- Insert Departments
INSERT INTO Departments (Department_name) VALUES ('Database'), ('Testing'), ('IT');
-- Insert Projects
INSERT INTO Projects (Project_code, Project_name, Project_manager, Project_budget)
VALUES ('Pc010', 'Reservation system', 'Mr. Ajay', 120500),
('Pc011', 'HR system', 'Mr. Charu', 500500),
('Pc012', 'Attendance system', 'Mr. Rajesh', 7100700);
-- Insert Employees
INSERT INTO Employees (Employee_name, Department_id, Hourly_rate)
VALUES ('Mohan', 1, 21.00), ('Vipul', 2, 16.50), ('Riyaz', 3, 22.00),
('Pavan', 1, 18.50), ('Jitendar', 2, 17.00), ('Poorja', 3, 23.50),
('Rahul', 1, 21.50), ('Avneh', 2, 15.50), ('Vikas', 3, 20.50);
-- Assign Employees to Projects
INSERT INTO Project_Employees (Project_code, Employee_id)
VALUES ('Pc010', 1), ('Pc010', 2), ('Pc010', 3),
('Pc011', 4), ('Pc011', 5), ('Pc011', 6),
('Pc012', 7), ('Pc012', 8), ('Pc012', 9);
Tasks 5-7: Security Setup
-- Create Logins
CREATE LOGIN Login1 WITH PASSWORD = 'coo@123';
CREATE LOGIN Login2 WITH PASSWORD = 'coo@321';
-- Create Users
CREATE USER user1 FOR LOGIN Login1;
CREATE USER user2 FOR LOGIN Login2;
-- Create Role & Add Users
CREATE ROLE Admin;
ALTER ROLE Admin ADD MEMBER user1;
ALTER ROLE Admin ADD MEMBER user2;
-- Permissions
DENY UPDATE, DELETE ON Projects(Project_budget) TO user1;
GRANT SELECT, INSERT, UPDATE, DELETE ON SCHEMA::dbo TO user2;
Task 8: Advanced Queries
Query 0: Retrieve Attendance System Details
SELECT
p.Project_manager,
p.Project_budget,
d.Department_name,
e.Employee_name
FROM Projects p
JOIN Project_Employees pe ON p.Project_code = pe.Project_code
JOIN Employees e ON pe.Employee_id = e.Employee_id
JOIN Departments d ON e.Department_id = d.Department_id
WHERE p.Project_name = 'Attendance system';
Query 1: Employee with Highest Hourly Rate
SELECT TOP 1 Employee_name, Hourly_rate
FROM Employees
ORDER BY Hourly_rate DESC;
Query 2: Count of Database Department Employees
SELECT COUNT(*) AS Database_Employees
FROM Employees e
JOIN Departments d ON e.Department_id = d.Department_id
WHERE d.Department_name = 'Database';
Query 3: Backup and Restore Database
BACKUP DATABASE ProjectManagement
TO DISK = 'D:\ProjectManagement.bak'
WITH INIT;
-- Restore (simulated - requires exclusive access)
RESTORE DATABASE ProjectManagement
FROM DISK = 'D:\ProjectManagement.bak'
WITH REPLACE;
Solution for Project 2: Develop Dynamic Web-based System
Task 2: Project Plan (Activities, Cost, Duration)
Phase Activities Duration Cost
Requirements Stakeholder interviews 3 days 500 0
Design ERD, System Architecture 2 days 4000
Development Frontend/Backend coding 10 days 2,0000
Testing Functionality/Security checks 3 days 600 0
Deployment Server setup & Launch 1 day 3000
Total 19 days 3,8000
Task 3: Infrastructure Requirements
Item Specification Quantity Cost
Web Server Apache/Nginx on Ubuntu 1 Free
20.04
Database Server MySQL 8.0 1 Free
Development PC 8GB RAM, 256GB SSD, i5 1 800 0
CPU
Backup Storage 500GB External HDD 1 600
Total Cost 860 0
---
Task 4: ER Diagram & System Architecture ER Diagram
erDiagram
CUSTOMERS ||--o{ ORDERS : places
PRODUCTS ||--o{ ORDER_DETAILS : included_in
INVENTORY ||--o{ PRODUCTS : tracks
ORDERS ||--o{ ORDER_DETAILS : contains
CUSTOMERS {
int customer_id PK
varchar name
varchar email
varchar address
}
PRODUCTS {
int product_id PK
varchar name
text description
decimal price
varchar size
varchar color
varchar image_url
}
ORDERS {
int order_id PK
int customer_id FK
date order_date
varchar status
}
ORDER_DETAILS {
int detail_id PK
int order_id FK
int product_id FK
int quantity
}
INVENTORY {
int inventory_id PK
int product_id FK
int stock
date last_updated
}
System Architecture:
Client Browser
→ Apache/PHP Web Server
→ MySQL Database
→ Cloud Storage (Product Images)
Task 5: Web Forms (HTML)
Product Form (`product_form.html`):
<!DOCTYPE html>
<html>
<head>
<title>Product Management</title>
</head>
<body>
<h2>Add Product</h2>
<form action="insert_product.php" method="POST">
<label>Name:</label>
<input type="text" name="name" required><br>
<label>Description:</label>
<textarea name="description" required></textarea><br>
<label>Price :</label>
<input type="number" step="0.01" name="price" required><br>
<label>Size:</label>
<input type="text" name="size"><br>
<label>Color:</label>
<input type="text" name="color"><br>
<label>Image URL:</label>
<input type="text" name="image_url"><br>
<input type="submit" value="Add Product">
</form>
</body>
</html>
(Similar forms for `customer_form.html`, `order_form.html`, `inventory_form.html`)
Task 6: Database Setup (MySQL)
CREATE DATABASE BMS;
USE BMS;
-- Products Table
CREATE TABLE products (
product_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100) ,
description TEXT ,
price DECIMAL(10,2) ,
size VARCHAR(20),
color VARCHAR(30),
image_url VARCHAR(255)
);
-- Customers Table
CREATE TABLE customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
email VARCHAR(100),
address TEXT NOT NULL
);
-- Orders Table
CREATE TABLE orders (
order_id INT AUTO_INCREMENT PRIMARY KEY,
customer_id INT,
order_date DATE ,
status ENUM('Pending','Shipped','Delivered'),
FOREIGN KEY (customer_id) REFERENCES customers(customer_id)
);
-- Inventory Table
CREATE TABLE inventory (
inventory_id INT AUTO_INCREMENT PRIMARY KEY,
product_id INT UNIQUE,
stock INT DEFAULT 0,
last_updated DATE,
FOREIGN KEY (product_id) REFERENCES products(product_id)
);
Task 7: Form Validation (JavaScript)
Add to `product_form.html`:
<script>
document.querySelector('form').addEventListener('submit', function(e) {
const nameField = document.querySelector('input[name="name"]');
const nameValue = nameField.value.trim();
// Validate empty
if(nameValue === '') {
alert("Name cannot be empty!");
e.preventDefault();
return;
}
// Validate numbers
if(/\d/.test(nameValue)) {
alert("Name cannot contain numbers!");
e.preventDefault();
}
});
</script>
Task 8: Database Connection (`db_connect.php`)
Task 9: Product Insertion Script (`insert_product.php`)