Mục đích của môn học này là mang đến cho sinh viên cơ hội phát triển sự hiểu biết về các khái niệm và vấn đề liên quan đến thiết kế và phát triển cơ sở dữ liệu, cũng như cung cấp các kỹ năng thực tế để chuyển sự hiểu biết đó vào việc thiết kế và tạo ra các cơ sở dữ liệu phức tạp. Các chủ đề trong phần này là: kiểm tra các công cụ và kỹ thuật thiết kế khác nhau; kiểm tra các lựa chọn phần mềm phát triển khác nhau; xem xét các tính năng phát triển của một giải pháp mạnh mẽ đầy đủ chức năng bao gồm tính toàn vẹn dữ liệu, xác thực dữ liệu, tính nhất quán của dữ liệu, bảo mật dữ liệu và các phương tiện truy vấn cơ sở dữ liệu nâng cao trên nhiều bảng; giao diện người dùng thích hợp cho cơ sở dữ liệu và cho các hệ thống liên kết bên ngoài khác; tạo các báo cáotrang tổng quan phức tạp, kiểm tra hệ thống theo yêu cầu của người dùng và hệ thống; và các thành phần của tài liệu hệ thống hoàn chỉnh
STATEMENTS OF USER AND SYSTEM REQUIREMENTS (P1)
OVERVIEW
FPT Shop has contacted my firm where I am working as a Database developer because the increasing number of stores FPT Shop are having many challenges that it has to handle throughout the nation It has made decision to create a new database with many purposes with different objects such as users can sign in with phone numbers and other data, supervisors can manage their stores and director board can view all information from all stores
The FPT Shop currently stores all data in excel files when a customer purchases an item, a staff will write that item’s information into a particular paper called receipt and give it to the customer All available items and purchased items also store in excel files
Figure 1 Product table’s data in excel
After a day, month, or year, staff will create a new table to calculate the total amount of money earned and reckon up the quantity, the following table made in excel:
Spreadsheets can be more collaborative than other tools
It’s easy to manipulate and analyze data
You can integrate spreadsheets with specific tools
Spreadsheets are quick and easy to add to a workflow
Spreadsheets are fantastic tools for financial documents
You have access to countless spreadsheet templates
It’s hard to tell who edited the spreadsheet
There will be multiple versions of the truth
Critical customer data is at everyday life's mercy
There’s no native integration with business systems
Spreadsheets make it harder for managers to manage team members
By creating a relational database system for the shop and organizing the information that has to be maintained into precise and understandable tables, the above issues may be resolved for the following benefits:
Reduced costs of data entry, data storage, and data retrieval
Improved data access using host and query languages
Higher data integrity from application programs
APPLICATION REQUIREMENT
SQL Server requires a minimum of 6 GB of available hard-disk space
SQL Server requires Super-VGA (800x600) or higher resolution monitor
Minimum operating systems includes minimum NET framework.
DESIGN THE RELATIONAL DATABASE SYSTEM (P1-D1)
REVIEW IF DATABASE IS NORMALIZED
From ERD Diagram shown above, we can see that the Products table contains transitive functional Dependence so that it cannot achieve 3NF (The third normal form):
To achieve 3NF, attribute ‘SupplierName’ needs to split from PRODUCTS in order to combine with SupplierID and then create a new table named SUPPLIERS
As the result, after normalizing, the database system contains the following tables
1 Products (ProductID, ProductName, Price, Quantity, SupplierID)
2 Orders (OrderID, OrderDate, CustomerID, StaffID)
3 Customers (CustomerID, CustomerName, Address, PhoneNumber)
4 Staffs (StaffID, StaffName, Address, Salary)
5 Details (OrderID, ProductID, Price, Quantity)
DATA VALIDATION
Products Table: this table is used to store all information about products It has several columns such as ProductID, ProductName, Price, Quantity… Among these, productID is the primary key The column productName must be not null and the Price, Quantity must be bigger than zero (>0) The detail of the table Products is shown as follow:
Column name Data Tye Allow null Contraint
Price Int Yes Check (Price>0)
Quantity Int Yes Check (quantity>0)
SupplierID Nvarchar(10) No FK (Suppliers)
Customers Table: this table is used to store all information of customers It has several columns such as CustomerID, CName, Address, PhoneNum… Among these, CustomerID is the primary key The columns CName and Address must not be null The detail of the table Customers is shown as follows:
Column name Data Tye Allow null Contraint
Staffs Table: this table is used to store all information about staff It has several columns such as StaffID, SName, Address, Salary… Among these, StaffID is the primary key The columns SName and Address must not be null and and Salary must be bigger than zero (>0) The detail of the table Staffs is shown as follows:
Column name Data Tye Allow null Contraint
Salary Int Yes Check (Salary>0)
Orders Table: this table is used to store all information on orders It has several columns such as OrderID, OrderDate, CustomerID, StaffID… Among these, StaffID is the primary key The columns' OrderDate must not be null The detail of table Orders is shown as follows:
Column name Data Tye Allow null Contraint
CustomerID Nvarchar(10) No FK from Customers
StaffID Nvarchar(10) No FK from Staffs
Details Table: this table is used to store all information of all details It has several columns such as OrderID, ProductID, Price, Quantity… Among these, OrderID and ProductID are the primary keys and the Price, Quantity must be bigger than zero (>0) The detail of table Details is shown as follows:
Column name Data Tye Allow null Contraint
OrderID Nvarchar(10) No PK-FK from Orders
ProductID Nvarchar(10) No PK-FK from Products
Price Int No Check (Price>0)
Quantity Int No Check (quantity>0)
Suppliers Table: this table is used to store all information of all suppliers It has two columns including SupplierID and SupplierName Among these, SupplierID is the primary keys The detail of table Suppliers is shown as follows:
Column name Data Tye Allow null Contraint
WIREFRAME OF APPLICATION
ProductID NVARCHAR(10) PRIMARY KEY, PName NVARCHAR(50) NOT NULL UNIQUE, Price INT CHECK(Price>0),
Quantity INT CHECK(Quantity>0) SupplierID nvarchar(10) REFERENCES SUPPLIERS (SupplierID) )
Figure 10 Products table using command
CustomerID NVARCHAR(10) PRIMARY KEY, CName NVARCHAR(100) NOT NULL,
Address NVARCHAR (150) NOT NULL, PhoneNum NVARCHAR (11)
Figure 11 Customers table using command
StaffID NVARCHAR(10) PRIMARY KEY, SName NVARCHAR(100) NOT NULL, Address NVARCHAR (150) NOT NULL, Salary INT CHECK(Salary>0) )
Figure 12 Staffs table using command
OrderID NVARCHAR(10) PRIMARY KEY, OrderDate DATE NOT NULL,
CustomerID NVARCHAR(10) REFERENCES CUSTOMERS (CustomerID), StaffID NVARCHAR(10) REFERENCES STAFFS (StaffID)
Figure 13 Orders table using command
Figure 14 Details table using command
Figure 15 Suppliers table using command
OrderID NVARCHAR(10) REFERENCES ORDERS (OrderID), ProductID NVARCHAR(10) REFERENCES PRODUCTS (ProductID), Price INT CHECK(Price>0),
Quantity INT CHECK(Quantity>0) CONSTRAINT PK_DETAIL PRIMARY KEY (OrderID, ProductID) )
SupplierID nvarchar(10) PRIMARY KEY, SupplierName nvarchar(50)
4.1 Sample data of Customers table
INSERT INTO DBO.CUSTOMERS VALUES ('0100', N'Bùi Quang Tường', N'11 Ngô Quyền',
GO INSERT INTO DBO.CUSTOMERS VALUES ('0101', N'Bùi Thị Thu tuyền', N'50 Ngô Quyền',
GO INSERT INTO DBO.CUSTOMERS VALUES ('0102', N'Huỳnh Văn Tú', N'122 Nguyễn Trưng',
GO INSERT INTO DBO.CUSTOMERS VALUES ('0103', N'Nguyễn Thị Anh', N'59 Trần Phú',
GO INSERT INTO DBO.CUSTOMERS VALUES ('0104', N'Lê Bá Lộc', N'25 Trần Phú', '0706162561') GO
4.2 Sample data of staff table
INSERT INTO DBO.STAFFS VALUES ('1123', N'Bùi Quang Minh', N'78 Lê Tấn Trung', 23000000)
GO INSERT INTO DBO.STAFFS VALUES ('2123', N'Trần Thị Thu Hà', N'50 Nam Thọ', 15000000)
INSERT INTO DBO.STAFFS VALUES ('3123', N'Hoàng Văn Nam', N'60 Lê Duẩn', 17000000)
INSERT INTO DBO.STAFFS VALUES ('1223', N'Phạm Thị Đài Trang', N'80 Lê Tấn
INSERT INTO DBO.STAFFS VALUES ('2223', N'Phan Tuyết Nhung', N'77 Lê Đức Thọ', 5000000) GO
4.3 Sample data of Products table
INSERT INTO DBO.PRODUCTs VALUES ('IP14', 'Iphone 14', 23000000, 10, 'APP')
GO INSERT INTO DBO.PRODUCTs VALUES ('IP14PM', 'Iphone 14 Pro Max', 36000000, 25, 'APP')
INSERT INTO DBO.PRODUCTs VALUES ('IP13', 'Iphone 13', 18400000, 55, 'APP')
INSERT INTO DBO.PRODUCTs VALUES ('IP13M', 'Iphone 13 Mini', 25200000, 5, 'APP')
GO INSERT INTO DBO.PRODUCTs VALUES ('GZFlip4', 'Galaxy Z Flip4', 32400000, 2, 'SS')
INSERT INTO DBO.PRODUCTs VALUES ('GZFold4', 'Galaxy Z Fold4', 55600000, 7, 'SS')
INSERT INTO DBO.PRODUCTs VALUES ('RN12', 'Redmi Note 12', 11000000, 40, 'Mi')
GO INSERT INTO DBO.PRODUCTs VALUES ('RN12P', 'Redmi Note 12 Pro', 14260000, 45, 'Mi')
INSERT INTO DBO.PRODUCTs VALUES ('OR8P', 'Oppo Reno 8 Pro', 1900000, 45, 'OPP')
INSERT INTO DBO.PRODUCTs VALUES ('Vv23', 'Vivo V23', 9990000, 45, 'Vi')
Figure 19 Data of all products
4.4 Sample data of Orders table
INSERT INTO DBO.ORDERS VALUES ('111', '2023-01-1', '0100', '2123')
GO INSERT INTO DBO.ORDERS VALUES ('112', '2023-01-2', '0101', '3123')
INSERT INTO DBO.ORDERS VALUES ('113', '2022-12-30', '0103', '2223')
INSERT INTO DBO.ORDERS VALUES ('114', '2022-12-25', '0104', '2223')
GO INSERT INTO DBO.ORDERS VALUES ('115', '2022-11-1', '0104', '1223')
INSERT INTO DBO.ORDERS VALUES ('116', '2022-10-17', '0102', '2123')
Figure 20 Data of orders placed
4.5 Sample data of Details table
INSERT INTO DBO.DETAILS VALUES ('111', 'IP14', 23000000, 5)
GO INSERT INTO DBO.DETAILS VALUES ('112', 'IP13M', 25200000, 7)
INSERT INTO DBO.DETAILS VALUES ('113', 'OR8P', 1900000, 12)
INSERT INTO DBO.DETAILS VALUES ('114', 'RN12P', 14260000, 17)
GO INSERT INTO DBO.DETAILS VALUES ('115', 'Vv23', 9990000, 20)
INSERT INTO DBO.DETAILS VALUES ('116', 'GZFold4', 55600000, 2)
Figure 21 Data of orders’ details
4.6 Sample data of Suppliers table
INSERT INTO DBO.SUPPLIERS VALUES ('APP', 'Apple')
GO INSERT INTO DBO.SUPPLIERS VALUES ('SS', 'SamSung')
GO INSERT INTO DBO.SUPPLIERS VALUES ('Mi', 'Xiaomi')
GO INSERT INTO DBO.SUPPLIERS VALUES ('OPP', 'OPPO')
GO INSERT INTO DBO.SUPPLIERS VALUES ('Vi', 'Vivo') GO
CREATE VIEW View_Products AS SELECT * FROM PRODUCTS
Figure 23 View of PRODUCTS table
CREATE VIEW View_Customers AS SELECT * FROM CUSTOMERS
Figure 24 View of CUSTOMERS table
CREATE VIEW View_Staffs AS SELECT * FROM STAFFS
Figure 25 View of STAFFS table
CREATE VIEW View_Orders AS SELECT * FROM ORDERS
Figure 26 View of ORDERS table
CREATE VIEW View_Details AS SELECT * FROM DETAILS
Figure 27 View of DETAILS table
CREATE VIEW View_Suppliers AS SELECT * FROM SUPPLIERS
Figure 28 View of SUPPLIERS table
6.1 Query to show products from 10m to 20m
SELECT * FROM PRODUCTS WHERE PRODUCTs.Price >= 10000000 and Price