Cập nhật:ngày 22 tháng 1 năm 2018 bởi Richard Holowczak
Các tài liệu sau ghi lại việc thiết kế và phát triển một ứng dụng cơ sở dữ liệu để hỗ trợ một tiệm làm tóc nhỏ. Dự án bắt đầu với mô tả về doanh nghiệp và tiến hành thông qua mô hình khái niệm (E-R), mô hình logic (Quan hệ), mô hình vật lý và cuối cùng là triển khai ứng dụng cơ sở dữ liệu. Ghi chú (Bình luận) được cung cấp ở cuối mỗi phần để giải thích một số tính năng cụ thể của các bước đang được thực hiện.
Mục lục
Tôi. Tình hình kinh doanh
II. Mô hình ER sử dụng ký hiệu UML
III. Chuyển đổi sang mô hình quan hệ
IV. Chuẩn hóa
V. Tạo lược đồ cơ sở dữ liệu với SQL
VI. Ứng dụng cơ sở dữ liệu
VII. Kết luận
.
tôi. Tình huống kinh doanh
Công ty chúng tôi đã sở hữu và điều hành một tiệm làm tóc và làm móng ở khu trung tâm Manhattan trong 7 năm. Chúng tôi đã sử dụng bảng tính và sổ nhật ký giấy để theo dõi khách hàng, các cuộc hẹn và thanh toán. Chúng tôi muốn thay thế phương pháp theo dõi doanh nghiệp thủ công này bằng cơ sở dữ liệu.
Trong hoạt động kinh doanh của chúng tôi, Khách hàng đặt Hẹn với nhà tạo mẫu tóc yêu thích của họ (những người cắt và tạo kiểu tóc cho khách hàng) hoặc nhân viên khác và có thể tận hưởng một số Dịch vụ như cắt / tạo kiểu tóc cơ bản, màu tóc, highlight, uốn, khuôn mặt, Làm móng tay, móng chân,… Chúng ta cần theo dõi nguyên vật liệu (dầu gội, màu tóc) và thời gian hoàn thành mỗi dịch vụ. Mặc dù mỗi dịch vụ đều có giá tiêu chuẩn, nhưng các chương trình khuyến mãi và các yếu tố khác có thể ảnh hưởng đến giá thực tế mà Khách hàng áp dụng cho dịch vụ nhất định.
Chúng tôi cũng cần theo dõi Nhân viên của mình bao gồm địa chỉ nhà riêng, thông tin liên hệ và mức lương của họ. Chúng tôi cần theo dõi thông tin liên hệ của từng Khách hàng cũng như giới tính của họ. Đối với Cuộc hẹn, chúng tôi cần biết ngày giờ của cuộc hẹn và cuộc hẹn dành cho khách hàng nào.
Bình luận
Dựa trên mô tả ở trên, hãy xây dựng mô hình Mối quan hệ thực thể bằng cách sử dụng ký hiệu UML sẽ nắm bắt tất cả các nhu cầu dữ liệu của doanh nghiệp.
II. Mô hình ER sử dụng Ký hiệu UML
Dựa trên mô tả ở trên, chúng tôi phát triển mô hình Mối quan hệ thực thể sau sử dụng ký hiệu UML.
Bình luận
Điều chúng tôi thích ở mô hình này:
- Tất cả các đường quan hệ đang ở vị trí ngang hoặc dọc. Không có dòng nào bị cắt ngang.
- Tên thuộc tính được viết đúng cách và không có dấu cách trong tên. Không có chữ viết tắt nào được sử dụng.
- Mỗi mối quan hệ có hai cụm từ mà từ đó chúng ta có thể tạo các câu quan hệ (xem phần tiếp theo).
- Sơ đồ cũng có "chú giải" ở góc trên bên phải để chúng tôi có thể cho biết sơ đồ đại diện cho điều gì và ai đã sửa đổi sơ đồ lần cuối.
Câu quan hệ
Một Khách hàng có thể là thực hiện một hoặc nhiều Cuộc hẹn
Một Cuộc hẹn phải là đặt trước cho một và chỉ một Khách hàng
Một SalonService có thể là một dịch vụ được hiển thị dưới dạng một hoặc nhiều ServiceRendered
Một ServiceRendered phải là kết xuất của một và chỉ một SalonService
Một nhân viên có thể là kết xuất một hoặc nhiều ServiceRendered
Một ServiceRendered phải là được hiển thị bởi một và chỉ một Nhân viên
Một Cuộc hẹn có thể là đặt trước để cung cấp một hoặc nhiều ServiceRendered
Một ServiceRendered phải là một dịch vụ cụ thể được hiển thị trong một và chỉ một Cuộc hẹn
Bình luận
Các câu quan hệ phải có ý nghĩa. Trong ví dụ này, các cụm động từ được gạch dưới. Tên thực thể được in đậm. Số lượng tối thiểu ( có thể là cho 0 và phải là cho 1) được viết nghiêng. Số lượng tối đa được viết là “một hoặc nhiều” cho * và “một và chỉ một” cho 1.
Với mô hình ER đã hoàn thành, chúng tôi chuyển sang bước tiếp theo - chuyển đổi mô hình ER khái niệm sang mô hình Quan hệ lôgic.
III. Chuyển đổi sang mô hình quan hệ
Bước tiếp theo là Chuyển đổi sơ đồ Mối quan hệ Thực thể sang Mô hình Quan hệ. Trong bước này, Số nhận dạng trong Thực thể trở thành Chìa khóa trong Mối quan hệ. Mối quan hệ Một-Nhiều dẫn đến việc một khóa ngoại được sao chép từ Mặt một sang Mặt nhiều của mối quan hệ.
Khách hàng (CustomerID (key), FirstName, LastName, PhoneNumber, Street, City, State, ZipCode)
SalonService (ServiceID (key), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)
Nhân viên (EmployeeID (key), FirstName, LastName, Street, City, State, ZipCode, PayRate)
Cuộc hẹn (AppointmentID (key), AppointmentDate, AppotinmentTime, CustomerID (fk))
ServiceRendered (AppointmentID (fk) (key), LineItemNumber (key), ServiceID (fk), ServiceExtendedPrice, EmployeeID (fk))
Đây là “tập hợp quan hệ ban đầu”.
Bình luận
- Lưu ý rằng ServiceRendered thực thể từ mô hình ER là ID-Dependent, nghĩa là nó cần một thuộc tính ngoài LineItemNumber để tạo thành một khóa tổng hợp.
- Các phím được hiển thị với ký hiệu (key) và các khóa ngoài được hiển thị với ký hiệu (fk).
Bước tiếp theo là chuẩn hóa tập hợp quan hệ ban đầu.
IV. Chuẩn hóa
Bước tiếp theo là bình thường hóa mối quan hệ.
Các bước cần thực hiện cho mỗi mối quan hệ là:
- Viết ra mối quan hệ bao gồm tất cả các tên thuộc tính. Cho biết khóa và khóa ngoại.
- Cung cấp một số dữ liệu mẫu cho mối quan hệ.
- Nêu Chìa khóa cho mối quan hệ và viết ra tất cả Sự phụ thuộc chức năng .
- Xem qua các định nghĩa của từng biểu mẫu thông thường bắt đầu với 1NF và lên đến BCNF (hoặc 3NF tùy thuộc vào yêu cầu dự án của bạn).
- Nếu một quan hệ đáp ứng định nghĩa của một dạng chuẩn, hãy chuyển sang dạng chuẩn cao hơn tiếp theo.
- Nếu một quan hệ không đáp ứng được định nghĩa của dạng chuẩn (ví dụ:nó chứa phụ thuộc khóa một phần hoặc chứa phụ thuộc bắc cầu), thì hãy tách quan hệ thành hai quan hệ mới.
Bắt đầu quá trình chuẩn hóa ngay từ đầu với mỗi mối quan hệ trong số hai mối quan hệ mới này.
Quan hệ khách hàng
Khách hàng (CustomerID (key), FirstName, LastName, CustPhone, Street, City, State, ZipCode, Gender)
Dữ liệu mẫu
CustomerID | FirstName | LastName | Số điện thoại | Phố | Thành phố | Bang | Mã ZipCode | Giới tính |
---|---|---|---|---|---|---|---|---|
C101 | Elia | Fawcett | 201-222-2222 | 8989 Smith Rd | Garfield | NJ | 07026 | F |
C102 | Ishwarya | Roberts | 201-222-3333 | 65 Hope Rd | Garfield | NJ | 07026 | M |
C103 | Frederic | Fawcett | 201-222-2222 | 8989 Smith Rd | Garfield | NJ | 07026 | M |
C104 | Goldie | Montand | 201-222-4321 | 5235 Ln gỗ lim | Garfield | NJ | 07026 | F |
C105 | Dheeraj | Alexander | 201-222-4545 | 666 22nd Ave | Bergenfield | NJ | 07621 | M |
C106 | Josie | Davis | 201-333-6789 | 4200 Bluejay Ave | Bergenfield | NJ | 07621 | F |
C107 | Faye | Glenn | 201-333-4242 | 1522 Main St | Công viên bên vách đá | NJ | 07010 | F |
C108 | Lauren | Hershey | 201-444-1313 | 2360 Maxon Rd | Englewood | NJ | 07631 | F |
Khóa:ID khách hàng
FD1:CustomerID -> FirstName, LastName, PhoneNumber, Street, City, State, ZipCode, Gender
FD2:Mã ZipCode -> Thành phố, Tiểu bang
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Tồn tại phụ thuộc bắc cầu:CustomerID -> ZipCode và ZipCode -> City, State
Giải pháp:Tách quan hệ Khách hàng thành hai quan hệ mới có tên là CustomerData và ZipCodes:
CustomerData (CustomerID (key), FirstName, LastName, CustPhone, Street, ZipCode (fk), Gender)
Khóa:ID khách hàng
FD1:CustomerID -> FirstName, LastName, PhoneNumber, Street, ZipCode (fk), Gender
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Mã ZipCodes (Mã ZipCode (khóa), Thành phố, Tiểu bang)
Khóa:Mã ZipCode
FD1:Mã ZipCode -> Thành phố, Tiểu bang
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Mối quan hệ với SalonService
SalonService (ServiceID (khóa), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)
Dữ liệu mẫu:
ServiceID | ServiceDuration | Giá dịch vụ | Vật liệu Dịch vụ | |
---|---|---|---|---|
SV101 | Cắt tóc nam | 20 | 22,00 | Không có |
SV102 | Cắt tóc cho phụ nữ | 30 | 32,00 | Không có |
SV103 | Cắt tóc cho trẻ em | 20 | 15,00 | Không có |
SV104 | Màu tóc của phụ nữ | 60 | 76,00 | Màu, Thuốc thử, Găng tay, Bàn chải thuốc thử, Giấy bạc |
SV105 | Kiểu tóc của phụ nữ | 45 | 56,00 | Dầu gội, Dầu xả |
SV106 | Kiểu tóc nam | 45 | 46,00 | Dầu gội, Dầu xả |
Khóa:ServiceID
FD1:ServiceID -> ServiceName, ServiceDuration, ServicePrice, ServiceMaterials
1NF:ServiceMaterials có thể được coi là một thuộc tính đa giá trị. Trong trường hợp này SalonService không nằm trong 1NF.
Giải pháp:Tách ServiceMaterials thành một mối quan hệ riêng biệt.
Tuy nhiên, đối với ví dụ này, chúng tôi sẽ giữ ServiceMaterials như một thuộc tính của quan hệ SalonService.
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Mối quan hệ của nhân viên
Nhân viên (EmployeeID (khóa), FirstName, LastName, Street, City, State, ZipCode, PayRate)
ID nhân viên | FirstName | LastName | Phố | Thành phố | Bang | Mã ZipCode | Tỷ lệ trả tiền |
---|---|---|---|---|---|---|---|
E300 | Niềm vui | Aveda | 46 Đại lộ Easton | Garfield | NJ | 07026 | 18,00 |
E400 | Geraldo | Geraldo | 12 Fortis Blvd. Đúng cách. 2A | Garfield | NJ | 07026 | 22,00 |
E500 | Koy | Petruzzio | 70 Wilard St. | Garfield | NJ | 07026 | 20,00 |
E600 | Landry | Monroe | 73 Holly Terrace | Công viên bên vách đá | NJ | 07010 | 18,00 |
E700 | Pat | Gửi lại | 2 Lincoln Place | Công viên bên vách đá | NJ | 07010 | 23,00 |
E800 | Mùa đông | Thuộc da | 215 Elm Ave | Teaneck | NJ | 07665 | 23,00 |
Khóa:EmployeeID
FD1:EmployeeID -> FirstName, LastName, Street, City, State, ZipCode, PayRate
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Tồn tại phụ thuộc bắc cầu:EmployeeID -> ZipCode và ZipCode -> City, State
Giải pháp:Tách quan hệ Khách hàng thành hai quan hệ mới có tên là EmployeeData và ZipCodes:
EmployeeData (EmployeeID (key), FirstName, LastName, Street, ZipCode (fk), PayRate)
Khóa:EmployeeID
FD1:EmployeeID -> FirstName, LastName, Street, ZipCode (fk), PayRate
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Lưu ý:Chúng tôi đã có mối quan hệ ZipCodes từ khi mối quan hệ Khách hàng được tách ra. Vì vậy, chúng tôi sử dụng lại quan hệ ZipCodes đó. Không cần tạo mối quan hệ ZipCodes thứ hai.
Mối quan hệ bổ nhiệm
Cuộc hẹn (ID bổ nhiệm (khóa), Ngày hẹn, Thời gian hẹn, ID khách hàng (fk))
Dữ liệu mẫu:
ID bổ nhiệm | Ngày bổ nhiệm | Thời gian hẹn | ID khách hàng |
---|---|---|---|
A400 | 22/10/2017 | 11:00:00 SA | C101 |
A401 | 11/6/2017 | 12:45:00 CH | C102 |
A402 | 12/7/2017 | 2:00:00 chiều | C106 |
A403 | 18/12/2017 | 3:30:00 chiều | C106 |
A404 | 21/12/2017 | 11:30:00 SA | C108 |
A405 | 31/12/2017 | 10:00:00 SA | C107 |
A406 | 1/11/2018 | 3:15:00 chiều | C103 |
A407 | 1/12/2018 | 2:30:00 chiều | C104 |
A408 | 22/01/2018 | 4:00:00 chiều | C105 |
Khóa:ID bổ nhiệm
FD1:AppointmentID -> Ngày bổ nhiệm, AppotinmentTime, CustomerID (fk)
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Mối quan hệ ServiceRendered
ServiceRendered (AppointmentID (fk) (key), LineItemNumber (key), ServiceID (fk), ServiceExtendedPrice, EmployeeID (fk))
Dữ liệu mẫu:
ID bổ nhiệm | LineItemNumber | ID dịch vụ | ServiceExtendedPrice | ID nhân viên |
---|---|---|---|---|
A400 | 1 | SV104 | 75,00 | E400 |
A400 | 2 | SV102 | 25,00 | E400 |
A401 | 1 | SV101 | 22,00 | E500 |
A402 | 1 | SV104 | 75,00 | E600 |
A402 | 2 | SV102 | 30,00 | E800 |
A403 | 1 | SV105 | 50,00 | E300 |
A404 | 1 | SV105 | 55,00 | E300 |
A405 | 1 | SV102 | 30,00 | E700 |
A405 | 2 | SV104 | 70,00 | E700 |
A405 | 3 | SV105 | 50,00 | E700 |
Khóa:ID bổ nhiệm, Mã số hàng
FD1:AppointmentID, LineItemNumber -> ServiceID (fk), ServiceExtendedPrice, EmployeeID (fk)
1NF:Đáp ứng định nghĩa của một quan hệ
2NF:Không có phụ thuộc chính một phần nào
3NF:Không có phụ thuộc bắc cầu
BCNF:Tất cả các yếu tố quyết định đều là khóa ứng viên
Tập hợp các mối quan hệ cuối cùng
Khách hàng (CustomerID (key), FirstName, LastName, PhoneNumber, Street, ZipCode (fk), Gender)
Mã Zip (Mã ZipCode (khóa), Thành phố, Tiểu bang)
SalonService (ServiceID (key), ServiceName, ServiceDuration, ServicePrice, ServiceMaterials)
Nhân viên (EmployeeID (key), FirstName, LastName, Street, ZipCode (fk), PayRate)
Cuộc hẹn (AppointmentID (key), AppointmentDate, AppotinmentTime, CustomerID (fk))
ServiceRendered (AppointmentID (fk) (key), LineItemNumber (key), ServiceID (fk), ServiceExtendedPrice, EmployeeID (fk))
Bình luận
- Lưu ý rằng chỉ một quan hệ ZipCodes là bắt buộc. Nó được chia sẻ với cả quan hệ Khách hàng và Nhân viên.
- Như đã lưu ý trước đây, thuộc tính ServiceMaterials chưa được chuẩn hóa trong ví dụ này. Có lẽ nó có thể được thực hiện trong một nhiệm vụ hoặc cải tiến mô hình trong tương lai.
Bây giờ các mối quan hệ đã được chuẩn hóa, lược đồ có thể được tạo trong hệ thống quản lý cơ sở dữ liệu bằng cách sử dụng ngôn ngữ truy vấn có cấu trúc (SQL).
V. Tạo lược đồ cơ sở dữ liệu với ngôn ngữ truy vấn có cấu trúc
Tạo một bảng trong cơ sở dữ liệu cho từng quan hệ trong tập hợp quan hệ cuối cùng.
Mã SQL sau tạo sáu bảng và thêm ràng buộc CHÍNH CHÍNH cho mỗi bảng:
TẠO BẢNG ZipCodes (zipcode VARCHAR (12) NOT NULL, city VARCHAR (36), state VARCHAR (4), CONSTRAINT pk_zipcodes PRIMARY KEY (zipcode)) TẠO BẢNG Khách hàng (CustomerID VARCHAR (10) NOT NULL, FirstName VARCHAR ( 35), VARCHAR tên cuối (35), VARCHAR số điện thoại (15), VARCHAR đường phố (35), ZipCode VARCHAR (12), VARCHAR giới tính (2), CONSTRAINT pk_customer KHÓA CHÍNH (ID khách hàng)) TẠO BẢNG HẸ NOT NULL, AppointmentDateTime DATE, CustomerID VARCHAR (10) NOT NULL, CONSTRAINT pk_appointment PRIMARY KEY (AppointmentID)) TẠO BẢNG SalonService (ServiceID VARCHAR (10) NOT NULL, ServiceName VARCHAR (35), ServiceDuration VARER INTEGER, ServicePrice Number, ServiceMaterial ), CONSTRAINT pk_salonservice KEY CHÍNH (ServiceID)) TẠO BẢNG Nhân viên (BIẾN SỐ NHÂN VIÊN (10) KHÔNG PHẢI N ULL, FirstName VARCHAR (35), LastName VARCHAR (25), Street VARCHAR (45), ZipCode VARCHAR (12), PayRate NUMBER, CONSTRAINT pk_employee PRIMARY KEY (EmployeeID)) CREATE TABLE ServiceRendered (AppointmentID VARCHAR (10) NOT NULL, LineItemNumber) INTEGER NOT NULL, ServiceID VARCHAR (10) NOT NULL, ServiceExtendedPrice NUMBER, EmployeeID VARCHAR (10) NOT NULL, CONSTRAINT pk_ServiceRendered PRIMARY KEY (AppointmentID, LineItemNumber))
Thêm khóa ngoài
Các mã SQL sau thêm các ràng buộc NGOẠI KHÓA để liên kết các bảng với nhau:
BẢNG BÁO GIÁ Khách hàng ADD CONSTRAINT fk_customer_zipcodes FOREIGN KEY (ZipCode) TÀI LIỆU THAM KHẢO Mã ZipCode (Mã ZipCode) BẢNG ALTER Nhân viên ADD CONSTRAINT fk_employee_zipcodes FOREIGN KEY (ZipCode) TÀI LIỆU THAM KHẢO Mã ZipCode (Mã ZipCode) . / pre>Bình luận về SQL:
- Hầu hết các DBMS sẽ lưu trữ NGÀY và GIỜ trong cùng một cột. Vì vậy, Ngày bổ nhiệm và Thời gian bổ nhiệm đã được kết hợp thành một cột trong cơ sở dữ liệu có tên là Thời gian bổ nhiệm
- Khóa và Khóa ngoài phải có cùng tên và kiểu dữ liệu chính xác. Ví dụ:CustomerID chính là VARCHAR (10) trong bảng Khách hàng và cũng là VARCHAR (10) trong bảng Cuộc hẹn.
- Các ràng buộc được đặt tên có ý nghĩa như pk_customer cho khóa chính và fk_customer_zipcodes cho khóa ngoại.
- Các cột như Số điện thoại và Mã ZipCode phải sử dụng kiểu dữ liệu VARCHAR. Nếu sử dụng kiểu dữ liệu NUMBER hoặc INTEGER thì các số 0 ở đầu sẽ bị thiếu.
Sau khi tạo các bảng và thêm các ràng buộc khóa ngoại, giản đồ cơ sở dữ liệu bây giờ trông giống như sau:
Chế độ xem mối quan hệ
Sử dụng Dạng xem Mối quan hệ trong Công cụ Cơ sở dữ liệu, chúng ta có thể thấy các mối quan hệ (khóa ngoại) giữa các bảng:
Thêm dữ liệu vào bảng bằng câu lệnh SQL INSERT
CHÈN VÀO GIÁ TRỊ ZipCodes ('07026', 'Garfield', 'NJ'); CHÈN VÀO GIÁ TRỊ ZipCodes ('07621', 'Bergenfield', 'NJ'); CHÈN VÀO GIÁ TRỊ ZipCodes ('07010', 'Cliffside Park ',' NJ '); CHÈN VÀO GIÁ TRỊ ZipCodes (' 07631 ',' Englewood ',' NJ '); CHÈN VÀO GIÁ TRỊ ZipCodes (' 07665 ',' Teaneck ',' NJ '); CHÈN VÀO GIÁ TRỊ CỦA KHÁCH HÀNG (' C101 ',' Elia ',' Fawcett ',' 201-222-2222 ',' 8989 Smith Rd ',' 07026 ',' F '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C102 ',' Ishwarya ',' Roberts ' , '201-222-3333', '65 Hope Rd ',' 07026 ',' M '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C103 ',' Frederic ',' Fawcett ',' 201-222-2222 ',' 8989 Smith Rd ',' 07026 ',' M '); CHÈN VÀO GIÁ TRỊ CỦA KHÁCH HÀNG (' C104 ',' Goldie ',' Montand ',' 201-222-4321 ',' 5235 Ironwood Ln ',' 07026 ',' F '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C105 ',' Dheeraj ',' Alexander ',' 201-222-4545 ',' 666 22nd Ave ',' 07621 ',' M '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C106 ',' Josie ',' Davis ',' 201-333-6789 ',' 4200 Bluejay Ave ',' 07621 ',' F '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C107 ',' Faye ',' Glenn ' , '201-333-4242', '1 522 Main St ',' 07010 ',' F '); CHÈN VÀO GIÁ TRỊ Khách hàng (' C108 ',' Lauren ',' Hershey ',' 201-444-1313 ',' 2360 Maxon Rd ',' 07631 ',' F '); CHÈN VÀO GIÁ TRỊ SalonService (' SV101 ',' Cắt tóc nam ', 20, 22,' Không có '); CHÈN VÀO GIÁ TRỊ SalonService (' SV102 ',' Cắt tóc cho nữ ', 30, 32 , 'Không có'); CHÈN VÀO GIÁ TRỊ Dịch vụ Salon ('SV103', 'Cắt tóc trẻ em', 20, 15, 'Không có'); CHÈN VÀO GIÁ TRỊ Dịch vụ Salon ('SV104', 'Màu tóc của Phụ nữ', 60, 76 , 'Màu, Thuốc thử, Găng tay, Bàn chải thuốc thử, Giấy bạc'); CHÈN VÀO GIÁ TRỊ Dịch vụ Salon ('SV105', 'Kiểu tóc của Phụ nữ', 45, 56, 'Dầu gội, Dầu xả'); CHÈN VÀO GIÁ TRỊ Dịch vụ Salon (' SV106 ',' Kiểu tóc nam ', 45, 46,' Dầu gội, dầu xả '); CHÈN VÀO GIÁ TRỊ Nhân viên (' E300 ',' Joy ',' Aveda ', '46 Easton Ave.', '07026' , 18); CHÈN VÀO GIÁ TRỊ Nhân viên ('E400', 'Geraldo', 'Geraldo', '12 Fortis Blvd. Đúng cách. 2A ',' 07026 ', 22); CHÈN VÀO GIÁ TRỊ Nhân viên (' E500 ',' Koy ',' Petruzzio ', '70 Wilard St.', '07026', 20); CHÈN VÀO GIÁ TRỊ Nhân viên ('E600', 'Landry', 'Monroe', '73 Holly Terrace ',' 07010 ', 18); CHÈN VÀO GIÁ TRỊ Nhân viên (' E700 ',' Pat ',' Reese ',' 2 Lincoln Place ',' 07010 ', 23); CHÈN VÀO GIÁ TRỊ NHÂN VIÊN ('E800', 'Winter', 'Tanner', '215 Elm Ave', '07665', 23); CHÈN VÀO GIÁ TRỊ Bổ nhiệm ('A400', '10/22/2017 11:00:00 AM ',' C101 '); CHÈN VÀO GIÁ TRỊ Cuộc hẹn (' A401 ', '11 / 06/2017 12:45:00 PM', 'C102'); CHÈN VÀO GIÁ TRỊ Cuộc hẹn ('A402', '12 / 07 / 2017 02:00:00 PM ',' C106 '); CHÈN VÀO GIÁ TRỊ Cuộc hẹn (' A403 ', '12 / 18/2017 03:30:00 PM', 'C106'); CHÈN VÀO GIÁ TRỊ Cuộc hẹn ('A404 ', '12 / 21/2017 11:30:00 AM', 'C108'); CHÈN VÀO GIÁ TRỊ Cuộc hẹn ('A405', '12 / 31/2017 10:00:00 AM ',' C107 '); CHÈN VÀO GIÁ TRỊ Cuộc hẹn ('A406', '01 / 11/2018 03:15:00 PM ',' C103 '); CHÈN VÀO GIÁ TRỊ Cuộc hẹn (' A407 ',' 01/12/2018 02:30:00 PM ', 'C104'); CHÈN VÀO GIÁ TRỊ Cuộc hẹn ('A408', '0 1/22/2018 04:00:00 PM ',' C105 '); CHÈN VÀO GIÁ TRỊ được gửi thêm của dịch vụ (' A400 ', 1,' SV104 ', 75,' E400 '); CHÈN VÀO GIÁ TRỊ được gửi thêm của dịch vụ (' A400 ', 2 , 'SV102', 25, 'E400'); CHÈN VÀO GIÁ TRỊ được gửi thêm vào dịch vụ ('A401', 1, 'SV101', 22, 'E500'); CHÈN VÀO GIÁ TRỊ được gửi thêm vào dịch vụ ('A402', 1, 'SV104', 75 , 'E600'); INSERT INTO ServiceRendered VALUES ('A402', 2, 'SV102', 30, 'E800'); CHÈN VÀO GIÁ TRỊ ServiceRendered ('A403', 1, 'SV105', 50, 'E300'); CHÈN VÀO GIÁ TRỊ được gửi thêm vào dịch vụ ('A404', 1, 'SV105', 55, 'E300'); CHÈN VÀO GIÁ TRỊ được gửi thêm dịch vụ ('A405', 1, 'SV102', 30, 'E700'); CHÈN VÀO GIÁ TRỊ được gửi thêm dịch vụ (' A405 ', 2,' SV104 ', 70,' E700 '); CHÈN VÀO GIÁ TRỊ được gửi thêm vào dịch vụ (' A405 ', 3,' SV105 ', 50,' E700 ');
Bình luận về Mẫu dữ liệu
- Chúng tôi chỉ thêm đủ dữ liệu để có thể kiểm tra mối quan hệ giữa các bảng và cung cấp cho các nhà phát triển ứng dụng thứ gì đó để làm việc.
- Hãy cẩn thận về thứ tự mà dữ liệu được thêm vào. Ví dụ:trước tiên, tất cả các Mã ZipCode cần phải được chèn trước khi Khách hàng hoặc Nhân viên (cả hai đều sử dụng Mã ZipCode làm khóa ngoại) có thể được chèn vào.
- Khi thêm dữ liệu VARCHAR với dấu ngoặc kép được nhúng, hãy sử dụng hai dấu ngoặc kép cùng nhau. ví dụ:"Kiểu tóc dành cho phụ nữ"
- Tại thời điểm này, lược đồ cơ sở dữ liệu đã sẵn sàng để các nhà phát triển ứng dụng bắt tay vào thiết kế các biểu mẫu, báo cáo và truy vấn.
Bây giờ lược đồ cơ sở dữ liệu đã được tạo và được điền với một số dữ liệu mẫu, ứng dụng cơ sở dữ liệu có thể được phát triển.
VI. Ứng dụng cơ sở dữ liệu
Ứng dụng cơ sở dữ liệu bao gồm một tập hợp các Biểu mẫu, Báo cáo và Truy vấn được liên kết với nhau trên Biểu mẫu Điều hướng.
Biểu mẫu dẫn hướng là biểu mẫu đầu tiên xuất hiện khi cơ sở dữ liệu được mở.
Biểu mẫu điều hướng
Các biểu mẫu và báo cáo nhập dữ liệu khác nhau có thể được hiển thị bằng cách nhấp vào lựa chọn ở phía bên trái.
Biểu mẫu nhập dữ liệu khách hàng
Biểu mẫu Nhập dữ liệu khách hàng được sử dụng để tra cứu khách hàng hiện tại và nhập thông tin khách hàng mới. Các trường Thành phố và Tiểu bang được điền tự động bằng cách chọn Mã ZipCode tạo thành Hộp Tổ hợp. Biểu mẫu có một số mã VBA tùy chỉnh để chuyển đổi Họ và Tên thành chữ hoa và để tạo ID khách hàng mới, duy nhất khi trường CustomerID trống xuất hiện sau khi tạo một bản ghi mới.
Biểu mẫu nhập dữ liệu dịch vụ thẩm mỹ viện
Biểu mẫu Nhập dữ liệu dịch vụ thẩm mỹ viện được sử dụng để truy vấn, cập nhật và thêm các dịch vụ thẩm mỹ viện mới.
Biểu mẫu nhập dữ liệu cuộc hẹn
Biểu mẫu Nhập dữ liệu cuộc hẹn được sử dụng để tạo cuộc hẹn mới cho khách hàng. Như với biểu mẫu Khách hàng, có thể tạo ID cuộc hẹn mới bằng cách nhấp vào trường ID cuộc hẹn trống sau khi tạo bản ghi mới. Khách hàng có thể được chọn từ hộp kết hợp ID khách hàng như được hiển thị bên dưới:
Nếu đây là Khách hàng mới đang đặt lịch hẹn, người dùng có thể nhấp vào nút Khách hàng mới để hiển thị biểu mẫu Nhập dữ liệu khách hàng. Sau khi thông tin của khách hàng mới được lưu, người dùng có thể quay lại biểu mẫu Nhập dữ liệu cuộc hẹn và thực hiện cuộc hẹn.
Mẫu lịch hẹn và dịch vụ
Mục đích của biểu mẫu này là nhập các dịch vụ khác nhau liên quan đến một cuộc hẹn. Biểu mẫu này cũng có thể được sử dụng để tạo hóa đơn cho khách hàng. Dịch vụ và Nhân viên có thể được chọn từ các hộp kết hợp tương ứng của họ như được hiển thị bên dưới:
Báo cáo Tổng số Cuộc hẹn với Khách hàng
Báo cáo này cung cấp bản tóm tắt về số cuộc hẹn và tổng số tiền mà mỗi khách hàng đã chi tiêu.
Dựa trên truy vấn:
CHỌN Customer.CustomerID, FirstName, LastName, SUM (q.TotalSpent) AS TotalSpent, COUNT (q.AppointmentID) AS NumberOfAppointmentsFROM Khách hàng, Cuộc hẹn, Query_Total_Spent_Each_Appointment AS qWHERE Customer.CustomerID =Appointment.CustomerID AND AppointmentID =q. CustomerIDGROUP BY Customer.CustomerID, FirstName, LastNameORDER BY LastName, FirstName;
Và truy vấn Total_Spent_Each_Appointment
CHỌN Cuộc hẹn.AppointmentID, SUM (ServiceExtendedPrice) AS TotalSpentFROM Cuộc hẹn, ServiceRenderedWHERE Cuộc hẹn.AppointmentID =ServiceRendered.Báo cáo dịch vụ và chiết khấu
Báo cáo này hiển thị từng dịch vụ với tổng giá dịch vụ thông thường, giá mở rộng và chỉ báo mức chiết khấu được áp dụng cho các dịch vụ đã cung cấp trong quá khứ.
Dựa trên truy vấn:
CHỌN SalonService.ServiceID, ServiceName, SUM (ServicePrice) AS TotalServicePrice, SUM (ServiceExtendedPrice) AS TotalExtPrice, FORMAT (1.0 - (SUM (ServiceExtendedPrice) / SUM (ServicePrice)), "0.00%") AS Giảm giáFROM SalonService, ServiceRenderedWHERE SalonService.ServiceID =ServiceRendered.ServiceIDGROUP BY SalonService.ServiceID, ServiceNameORDER BY SalonService.ServiceID, ServiceName;Báo cáo địa chỉ khách hàng
Báo cáo này hiển thị tên và địa chỉ đầy đủ của từng Khách hàng.
VII. Kết luận
Việc phát triển một ứng dụng cơ sở dữ liệu tuân theo một vòng đời phát triển hệ thống bắt đầu bằng mô hình hóa khái niệm và chuyển qua một tập hợp các bước có cấu trúc bao gồm mô hình hóa logic, chuẩn hóa, triển khai vật lý và phát triển ứng dụng. Ví dụ về dự án Salon tóc minh họa từng bước chính này. Tuy nhiên một số chi tiết đã không được ghi lại đầy đủ. Ví dụ:một số công việc bổ sung có thể được yêu cầu để bình thường hóa mối quan hệ Dịch vụ thẩm mỹ viện để tính đến các vật liệu khác nhau được sử dụng cho mỗi dịch vụ. Các chi tiết triển khai Ứng dụng bổ sung như mã VBA khác và các mô tả chi tiết hơn về việc sử dụng từng biểu mẫu và báo cáo cũng có thể được thêm vào.