### Câu 1 (2,0 điểm)
#### a) Xây dựng cấu trúc bảng trong cơ sở dữ liệu để lưu trữ thông tin về nhân viên
Để xây dựng cấu trúc bảng trong cơ sở dữ liệu cho thông tin nhân viên, bạn cần thực hiện các bước sau:
1. **Xác định các trường thông tin cần lưu trữ**:
- Tên nhân viên (FullName)
- Ngày sinh (DateOfBirth)
- Vị trí công việc (JobPosition)
- Mức lương (Salary)
- Thông tin liên hệ (ContactInfo)
2. **Thiết kế bảng**:
- Tạo bảng `Employees` với các trường đã xác định. Cấu trúc bảng có thể như sau:
```sql
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY AUTO_INCREMENT,
FullName VARCHAR(100) NOT NULL,
DateOfBirth DATE NOT NULL,
JobPosition VARCHAR(50) NOT NULL,
Salary DECIMAL(10, 2) NOT NULL,
ContactInfo VARCHAR(255)
);
```
3. **Chọn kiểu dữ liệu phù hợp**:
- `EmployeeID`: Sử dụng kiểu INT và tự động tăng để đảm bảo mỗi nhân viên có một ID duy nhất.
- `FullName`: Sử dụng VARCHAR để lưu tên nhân viên.
- `DateOfBirth`: Sử dụng kiểu DATE để lưu ngày sinh.
- `JobPosition`: Sử dụng VARCHAR để lưu vị trí công việc.
- `Salary`: Sử dụng DECIMAL để lưu mức lương với độ chính xác cao.
- `ContactInfo`: Sử dụng VARCHAR để lưu thông tin liên hệ.
4. **Đảm bảo tính toàn vẹn dữ liệu**:
- Sử dụng các ràng buộc (constraints) như NOT NULL để đảm bảo không có trường nào bị bỏ trống.
#### b) Thiết kế cơ sở dữ liệu cho ứng dụng quản lý dự án
Để thiết kế cơ sở dữ liệu cho ứng dụng quản lý dự án, bạn cần thực hiện các bước sau:
1. **Xác định các thực thể và mối quan hệ**:
- Các thực thể chính có thể bao gồm: `Projects`, `Tasks`, `Employees`.
- Mối quan hệ giữa các thực thể:
- Một dự án có thể có nhiều công việc (tasks).
- Một công việc có thể được thực hiện bởi nhiều nhân viên (employees).
2. **Thiết kế bảng**:
- Tạo bảng `Projects`, `Tasks`, và `Employees` với các trường thông tin cần thiết. Cấu trúc bảng có thể như sau:
```sql
CREATE TABLE Projects (
ProjectID INT PRIMARY KEY AUTO_INCREMENT,
ProjectName VARCHAR(100) NOT NULL,
StartDate DATE NOT NULL,
EndDate DATE,
Status VARCHAR(20)
);
CREATE TABLE Tasks (
TaskID INT PRIMARY KEY AUTO_INCREMENT,
ProjectID INT,
TaskName VARCHAR(100) NOT NULL,
AssignedTo INT,
Status VARCHAR(20),
Progress INT CHECK (Progress BETWEEN 0 AND 100),
FOREIGN KEY (ProjectID) REFERENCES Projects(ProjectID),
FOREIGN KEY (AssignedTo) REFERENCES Employees(EmployeeID)
);
CREATE TABLE Employees (
EmployeeID INT PRIMARY KEY AUTO_INCREMENT,
FullName VARCHAR(100) NOT NULL,
ContactInfo VARCHAR(255)
);
```
3. **Đảm bảo tính toàn vẹn dữ liệu**:
- Sử dụng các ràng buộc khóa ngoại (FOREIGN KEY) để đảm bảo rằng các công việc (tasks) phải thuộc về một dự án (project) và được giao cho một nhân viên (employee) hợp lệ.
4. **Khả năng mở rộng**:
- Thiết kế bảng với các trường có thể mở rộng trong tương lai, ví dụ như thêm trường cho các thông tin bổ sung về công việc hoặc dự án.
- Sử dụng các chỉ mục (indexes) để cải thiện hiệu suất truy vấn khi số lượng dữ liệu tăng lên.
Bằng cách thực hiện các bước trên, bạn có thể thiết kế một cơ sở dữ liệu hiệu quả cho ứng dụng quản lý dự án, đảm bảo tính toàn vẹn dữ liệu và khả năng mở rộng khi cần thiết.