GIỚI THIỆU MÃ NGUỒN MỞ
Khái niệm mã nguồn mở
Mã nguồn mở là khái niệm chỉ các phần mềm có mã nguồn được công khai và cho phép mọi người phát triển thêm Tuy nhiên, điều này không có nghĩa là người dùng có quyền sao chép, sửa đổi hay sử dụng phần mềm cho bất kỳ mục đích nào mà không tuân thủ các quy định.
Mã nguồn mở được phát hành dưới nhiều điều kiện khác nhau, cho phép phát triển, sử dụng và bán sản phẩm miễn là giữ nguyên nguồn gốc, hoặc yêu cầu sản phẩm phát sinh cũng phải là mã nguồn mở Một số giấy phép yêu cầu công bố toàn bộ mã nguồn, trong khi một số khác không cho phép sử dụng vào mục đích thương mại Để hiểu rõ về tính pháp lý của phần mềm mã nguồn mở, cần xem xét các điều kiện cụ thể của từng giấy phép Một trong những giấy phép phổ biến nhất là GPL (GNU General Public License) từ tổ chức Free Software Foundation.
GPL có hai đặc điểm phân biệt đó là:
Tác giả gốc giữ bản quyền phần mềm nhưng cho phép người dùng nhiều quyền, bao gồm quyền tìm hiểu, phát triển, công bố và khai thác thương mại sản phẩm Một đặc điểm quan trọng là hiệu ứng virus, khiến tất cả phần mềm sử dụng mã nguồn GPL cũng trở thành phần mềm GPL Điều này có nghĩa rằng bất kỳ tác giả nào sử dụng bất kỳ phần nào của mã nguồn GPL trong chương trình của mình đều phải công bố dưới điều kiện GPL.
Các điều khoản phân phối của phần mềm mã nguồn mở phải tuân thủ các tiêu chuẩn sau:
Tự do tái phân phối
Giấy phép cho phép mọi người tự do bán hoặc chia sẻ phần mềm mà không bị hạn chế Ngoài ra, giấy phép này không yêu cầu thanh toán bản quyền hay các khoản phí khác.
Chương trình cần phải bao gồm mã nguồn và cho phép phân phối cả mã nguồn lẫn phiên bản đã biên dịch Nếu một số sản phẩm không đi kèm mã nguồn, cần có phương thức phổ biến rộng rãi để người dùng có thể dễ dàng tiếp cận mã nguồn với chi phí thấp hơn so với chi phí tái sản xuất hợp lý, bao gồm khả năng tải về miễn phí qua Internet.
Các phần mềm phải có nguồn gốc
Bản quyền cần cho phép sửa đổi phần mềm gốc và cho phép phân phối chúng theo các điều khoản tương tự như giấy phép của phần mềm gốc.
Tính toàn vẹn của mã nguồn cung cấp bởi tác giả
Giấy phép phần mềm có thể giới hạn việc phân phối mã nguồn đã sửa đổi, nhưng phải cho phép rõ ràng việc phát hành “các tập tin vá” cùng với mã nguồn để sửa đổi trong quá trình xây dựng chương trình Ngoài ra, giấy phép cần xác định rằng phần mềm được tạo ra từ mã nguồn sửa đổi có thể được phân phối, có thể yêu cầu các sản phẩm mang tên hoặc phiên bản khác so với phần mềm gốc Do đó, giấy phép mã nguồn mở phải đảm bảo mã nguồn luôn sẵn có, nhưng có thể yêu cầu phân phối cùng với các bản vá như nguyên gốc.
Không có sự phân biệt giữa cá nhân hay nhóm người
Giấy phép không được phân biệt với bất cứ cá nhân hay nhóm người nào
Không phân biệt bất cứ một lĩnh vực nào
Bản quyền phải không được cản trở bất cứ ai khỏi việc sử dụng chương trình trong một lĩnh vực cụ thể.
Việc phân phối bản quyền
Tất cả quyền lợi liên quan đến chương trình phải được áp dụng đồng nhất cho mọi đối tượng, và chương trình có thể được phân phối lại mà không cần giấy phép bổ sung từ các bên liên quan.
Giấy phép không đƣợc giành riêng cho một sản phẩm
Các quyền lợi liên quan đến chương trình không phụ thuộc vào việc nó có phải là một phần của phân phối phần mềm cụ thể hay không Nếu chương trình được tách ra và sử dụng hoặc phân phối theo các điều khoản của giấy phép đi kèm, thì tất cả các bên nhận chương trình cũng sẽ có quyền lợi tương đương như những quyền lợi được cung cấp trong bản phân phối phần mềm gốc.
Giấy phép không đƣợc hạn chế các phần mềm khác
Giấy phép không được đặt ra các hạn chế đối với các phần mềm khác đi kèm với phần mềm được cấp phép Chẳng hạn, giấy phép không cần yêu cầu rằng tất cả các chương trình khác trong cùng một môi trường phải là phần mềm mã nguồn mở.
Giấy phép phải rõ ràng về mặt công nghệ
Không cho phép tồn tại các giấy phép có liên quan đến bất cứ công nghệ cá nhân hay một kiểu giao tiếp nào
Mã nguồn mở (Open Source) đề cập đến các sản phẩm phần mềm có mã nguồn công khai, cho phép người dùng không chỉ tải về miễn phí mà còn có quyền sửa đổi, cải tiến và phát triển phần mềm theo các nguyên tắc trong giấy phép như General Public Licence (GPL) Điều này khác biệt hoàn toàn với phần mềm nguồn đóng, nơi người dùng không có quyền can thiệp Thuật ngữ “Open Source” thu hút sự quan tâm của các doanh nhân nhờ vào lợi ích miễn phí và quyền sở hữu hệ thống mà nó mang lại.
Nhà cung cấp phần mềm nguồn mở có thể yêu cầu người dùng trả phí cho các dịch vụ như bảo hành, đào tạo, nâng cấp và tư vấn Tuy nhiên, họ không được phép bán các sản phẩm nguồn mở, vì những sản phẩm này thuộc về tài sản trí tuệ chung, không phải là tài sản riêng của bất kỳ nhà cung cấp nào.
Open Source mang lại nhiều tiện ích, bao gồm quyền tự do sử dụng phần mềm cho mọi mục đích, quyền nghiên cứu cấu trúc chương trình, và khả năng chỉnh sửa để phù hợp với nhu cầu cá nhân Người dùng có quyền truy cập vào mã nguồn, phân phối lại các phiên bản cho người khác, cải tiến phần mềm và phát hành những bản nâng cấp phục vụ cộng đồng.
Lợi ích của mã nguồn mở
Phần mềm có thể được sao chép hoàn toàn miễn phí, người dùng hoàn toàn an tâm khi chia sẻ một chương trình tốt với bạn bè
Hầu hết các sản phẩm mã nguồn mở đều có khả năng bảo mật xuất sắc, và khi phát hiện lỗ hổng, chúng thường được khắc phục nhanh chóng hơn so với phần mềm bản quyền.
Các hệ thống Open Source, đặc biệt là những hệ thống dựa trên UNIX, nổi bật với tính linh hoạt cao Điều này xuất phát từ việc chúng được xây dựng từ nhiều khối thống nhất và được mô tả chi tiết, cho phép người dùng dễ dàng thay thế các thành phần của hệ thống bằng những phần có giao diện tương tự.
Có một cộng đồng hỗ trợ lớn, không bị phụ thuộc vào một công ty nào
Các công ty lớn như IBM, Oracle và Sun đã chấp nhận Open Source, cho thấy tầm quan trọng của nó trong ngành công nghệ Ngay cả Microsoft cũng đã phải chú ý đến Open Source như một đối thủ đáng gờm.
Open Source là phương pháp bền vững cho việc phân phối và phát triển phần mềm, cung cấp cho người dùng cả giải pháp phần mềm và mã nguồn với giấy phép Open Source Đặc biệt, các doanh nghiệp vừa và nhỏ ngày càng ưa chuộng sử dụng phần mềm Open Source.
Nhiều tổ chức hiện nay đang có kế hoạch áp dụng mã nguồn mở để phát triển các thành phần cốt lõi của hệ thống, bao gồm hệ điều hành, cơ sở dữ liệu, ứng dụng, máy chủ web, hệ thống quản trị nội dung và nhiều phần mềm kinh doanh thông minh khác.
Mặc dù con đường khẳng định vị trí của phần mềm miễn phí vẫn còn nhiều thách thức, nhưng Open Source đã chiếm đến 70% thị trường ứng dụng Web và con số này có dấu hiệu tiếp tục gia tăng.
Cả công ty lẫn khách hàng đều hưởng lợi từ việc sử dụng phần mềm mã nguồn mở Khách hàng được tiếp cận phần mềm chất lượng cao với mức giá hợp lý, trong khi nhà cung cấp tiết kiệm chi phí phát triển, kiểm tra và quản lý dự án Hơn nữa, nhân lực của họ nhanh chóng nâng cao kỹ năng và giảm thời gian làm việc thủ công nhờ vào việc tiếp nhận mã nguồn chất lượng từ các dự án mã nguồn mở được phát triển chuyên nghiệp.
HỆ QUẢN TRỊ CƠ SỞ DỮ LIỆU POSTGRESQL
Giới thiệu sơ lƣợc về PostgreSQL
PostgreSQL là một hệ quản trị cơ sở dữ liệu mã nguồn mở mạnh mẽ, đã phát triển hơn 15 năm và được người dùng tin tưởng về độ tin cậy và tính toàn vẹn dữ liệu Hệ quản trị này hoạt động trên nhiều hệ điều hành như Linux, UNIX và Windows, hỗ trợ đầy đủ các tính năng như foreign keys, joins, views, triggers, và stored procedures PostgreSQL cung cấp các kiểu dữ liệu SQL: 2008 như INTEGER, BOOLEAN, CHAR, và TIMESTAMP, đồng thời cho phép lưu trữ các đối tượng nhị phân lớn như hình ảnh, âm thanh, và video Hệ thống này có thể được truy cập thông qua nhiều ngôn ngữ lập trình như C/C++, Java, Python, và Ruby.
PostgreSQL là một hệ quản trị cơ sở dữ liệu mạnh mẽ với nhiều tính năng phức tạp như kiểm soát truy cập đồng thời nhiều phiên bản (MVCC), khôi phục dữ liệu tại từng thời điểm, và quản lý dung lượng bảng (tablespaces) Nó hỗ trợ sao chép không đồng bộ, giao dịch lồng nhau (savepoints), và các phương thức sao lưu trực tuyến hoặc nội bộ PostgreSQL cũng cho phép thực hiện các truy vấn phức tạp và tối ưu hóa, đồng thời hỗ trợ bộ ký tự quốc tế, bảng mã nhiều byte và Unicode Hệ thống này có khả năng mở rộng cao, cho phép quản lý lượng dữ liệu lớn và số lượng người dùng truy cập đồng thời, với khả năng xử lý hơn 4 terabyte dữ liệu trong môi trường thực tế.
Sau đây là một số thông tin giới hạn khả năng của PostgreSQL:
Dung lƣợng tối đa của cơ sở dữ liệu Không giới hạn
Dung lƣợng bảng tối đa 32 TB
Dung lƣợng tối đa của cột 1,6 TB
Dung lượng tối đa của trường 1 GB
Hàng tối đa mỗi Bảng Không giới hạn
Số cột tối đa của mỗi bảng 250 - 1600 tùy thuộc vào loại cột Chỉ số tối đa của mỗi bảng Không giới hạn
Bảng 2.1 Thông tin giới hạn khả năng của PostgreSQL 2.1.2 Vài nét về lịch sử PostgreSQL
PostgreSQL, hệ thống quản lý cơ sở dữ liệu đối tượng-quan hệ, có nguồn gốc từ các gói Postgres được phát triển tại Đại học California, Berkeley Sau hơn hai thập kỷ phát triển, PostgreSQL hiện là cơ sở dữ liệu mã nguồn mở tiên tiến nhất, sẵn sàng phục vụ nhu cầu ở bất kỳ đâu.
Dự án Postgres, do Giáo sư Michael Stonebraker lãnh đạo, được tài trợ bởi DARPA, ARO, NSF và ESL Inc., bắt đầu triển khai vào năm 1986 Các khái niệm ban đầu cho hệ thống đã được trình bày trong tài liệu “Các thiết kế của Postgres - Stonebraker và Rowe, 1986”, trong đó định nghĩa mô hình dữ liệu ban đầu cũng đã được giới thiệu.
Mô hình dữ liệu Postgres được giới thiệu bởi Rowe và Stonebraker vào năm 1987, trong đó thiết kế hệ thống quy tắc đã được mô tả bởi Stonebraker, Hanson và Hong Các yếu tố cơ bản và kiến trúc của người quản lý kho lưu trữ cũng được trình bày chi tiết trong thiết kế hệ thống lưu trữ Postgres.
Postgres đã trải qua nhiều phiên bản chính kể từ khi ra mắt Hệ thống demoware đầu tiên hoạt động vào năm 1987 và được giới thiệu tại Hội nghị ACM-SIGMOD 1988 Phiên bản 1, được mô tả trong tài liệu “Việc triển khai Postgres - Stonebraker, Rowe, Hirohama, 1990”, được phát hành vào tháng 6 năm 1989 với một số người dùng bên ngoài Để cải thiện sau khi nhận được phản hồi về hệ thống quy tắc đầu tiên, phiên bản 2 đã được phát hành vào tháng 6 năm 1990 với hệ thống quy tắc mới Phiên bản 3 đã xuất hiện vào năm tiếp theo.
Vào năm 1991, hệ thống đã được cải tiến với việc bổ sung hỗ trợ cho người quản lý nhiều kho lưu trữ, nâng cao khả năng thực thi truy vấn và viết lại hệ thống quy tắc Các phiên bản tiếp theo, cho đến Postgres 95, chủ yếu tập trung vào việc nâng cao tính di động và độ tin cậy của hệ thống.
POSTGRES đã được ứng dụng trong nhiều lĩnh vực sản xuất và nghiên cứu, bao gồm hệ thống phân tích cơ sở dữ liệu tài chính, giám sát hiệu năng động cơ phản lực, theo dõi hành tinh nhỏ, thông tin y tế, và hệ thống thông tin địa lý Ngoài ra, nó còn được sử dụng như một công cụ giáo dục tại một số trường đại học Cuối cùng, Illustra Information Technologies đã chọn mã nguồn của POSTGRES để thương mại hóa, và vào cuối năm 1992, nó trở thành trình quản lý cơ sở dữ liệu chính cho dự án tính toán khoa học Sequoia 2000.
Quy mô của cộng đồng người dùng bên ngoài tăng gần gấp đôi trong năm
Năm 1993, việc bảo trì mã mẫu và hỗ trợ đã tiêu tốn nhiều thời gian, lẽ ra nên được dành cho nghiên cứu cơ sở dữ liệu Để giảm bớt gánh nặng này, dự án Postgres tại Berkeley đã chính thức kết thúc với phiên bản 4.2.
Vào năm 1994, Andrew Yu và Jolly Chen đã phát triển một trình biên dịch ngôn ngữ SQL cho POSTGRES, dẫn đến việc ra mắt Postgres95 Phiên bản mới này được phát hành trên web, nhằm khẳng định vị thế của nó như một hậu duệ nguồn mở của mã POSTGRES tại Berkeley.
Mã nguồn của Postgres95 đã được chuyển đổi hoàn toàn sang ANSI C và giảm kích thước tới 25%, mang lại hiệu suất và khả năng bảo trì tốt hơn Bản phát hành 1.0.x của Postgres95 có tốc độ nhanh hơn từ 30-50% so với phiên bản chuẩn Wisconsin 4.2 của Postgres, cùng với nhiều cải tiến quan trọng và sửa lỗi.
Ngôn ngữ truy vấn PostQUEL đã được thay thế bằng SQL trong máy chủ, với sự hỗ trợ cho các truy vấn phụ (Subqueries) trong PostgreSQL Mặc dù vậy, các truy vấn phụ có thể được mô phỏng trong Postgres95 thông qua các hàm SQL do người sử dụng định nghĩa Hơn nữa, các hàm tổng hợp đã được tái triển khai và hỗ trợ cho câu truy vấn GROUP BY cũng đã được bổ sung.
Chương trình mới psql đã được giới thiệu cho các truy vấn SQL tương tác, sử dụng GNU Readline, thay thế phần lớn chương trình giám sát cũ.
Thư viện front-end mới mang tên „libpgtcl‟ hỗ trợ các máy trạm dựa trên Tcl, đi kèm với một trình biên dịch mẫu gọi là pgtclsh, cung cấp các lệnh Tcl mới để giao tiếp với máy chủ Postgres95.
Giao diện đối tượng lớn đã trải qua quá trình kiểm tra kỹ lưỡng Hiện nay, các đối tượng nghịch đảo lớn chỉ còn giữ vai trò là cơ chế lưu trữ cho các đối tượng lớn, trong khi hệ thống tệp nghịch đảo đã được loại bỏ.
Một sách chỉ dẫn ngắn gọn giới thiệu các tính năng SQL thông thường cũng nhƣ các tính năng của Postgres95 đã đƣợc phát hành cùng với mã nguồn
ỨNG DỤNG
Mô tả bài toán
Trường ĐHDL HP hiện đang chuyển sang mô hình đào tạo tín chỉ, dẫn đến số lượng lớp môn học lớn mỗi kỳ (gần 500 lớp) Việc theo dõi thông tin ra vào lớp hàng ngày của giảng viên là rất cần thiết, với cán bộ Ban thanh tra và Phòng đào tạo thường xuyên kiểm tra tình hình ra vào lớp (ra sớm, vào muộn, nghỉ dạy) Mặc dù hiện tại công tác này chủ yếu được thực hiện thủ công qua sổ sách giấy và một phần sử dụng Excel, nhưng việc tổng hợp báo cáo theo các tiêu chí cụ thể vẫn gặp nhiều khó khăn Điều này không chỉ tốn thời gian mà còn ảnh hưởng đến độ chính xác trong công tác tổng hợp và báo cáo Cuối mỗi học kỳ, cần lập báo cáo tổng hợp về công tác giảng dạy của giảng viên (cơ hữu, thỉnh giảng ở Hải Phòng và Hà Nội), tuy nhiên việc thực hiện báo cáo thủ công hiện tại đang gặp nhiều trở ngại.
Giải pháp đặt ra là xây dựng ứng dụng trợ giúp:
- Tra cứu việc thực hiện giờ lên lớp của giảng viên theo đơn vị
- Tra cứu việc thực hiện giờ lên lớp của giảng viên
- Thống kê số lƣợt ra sớm vào muộn của từng đơn vị
- Thống kê kết quả kiểm tra việc thực hiện giờ lên lớp của giảng viên.
Thiết kế cơ sở dữ liệu
3.2.1 Xác định các kiểu thực thể, các thuộc tính và thuộc tính khóa của thực thể
STT Kiểu thực thể Thuộc tính Thuộc tính khóa
1 GIẢNG VIÊN Mã giảng viên, Họ tên giảng viên,
Giới tính, Mã học hàm, Mã học vị, Email Mã giảng viên
2 ĐƠN VỊ Mã đơn vị, Tên đơn vị Mã đơn vị
3 PHÒNG HỌC Mã phòng học, Địa chỉ, Số chỗ Mã phòng học
4 MÔN HỌC Mã môn học, Tên môn học, Số tín chỉ Mã môn học
Bảng 3.2 Xác định các kiểu thực thể
3.2.2 Xác định các kiểu liên kết
GIẢNG VIÊN Thuộc ĐƠN VỊ n 1 n 1
Ngày kiểm tra Tiết dạy
Ra sớm Vào muộn Địa chỉ
Họ tên giảng viên Giới tính
Từ mô hình khái niệm dữ liệu ta chuyển thành mô hình quan hệ:
Mã giảng viên Họ tên giảng viên Giới tính Đơn vị Mã học hàm Mã học vị Email
Mã phòng học Địa chỉ Số chỗ ĐƠN VỊ
Mã đơn vị Tên đơn vị
Mã môn học Tên môn học Số tín chỉ
Idkt Mã giảng viên Mã phòng học Ngày kiểm tra Tiết dạy Vào muộn Ra sớm Ghi chú
Hình 3.1 Mô hình quan hệ
3.2.5 Các bảng dữ liệu vật lý a Bảng DONVI dùng để lưu thông tin của đơn vị, có cấu trúc:
TT Tên trường Kiểu dữ liệu Kích cỡ Ghi chú
1 MaDonVi Integer Mã đơn vị, Khóa chính
2 TenDonVi Character 75 Tên đơn vị
Bảng 3.3 Bảng đơn vị b Bảng PHONGHOC dùng để lưu thông tin của phòng học, có cấu trúc:
TT Tên trường Kiểu dữ liệu Kích cỡ Ghi chú
1 Maphonghoc Character 4 Mã phòng học, khóa chính
2 Diachi Character 50 Địa chỉ phòng học
Bảng 3.4 Bảng phòng học c Bảng GIANGVIEN dùng để lưu thông tin của giảng viên, có cấu trúc:
STT Tên trường Kiểu dữ liệu Kích cỡ Ghi chú
1 MaGiangVien Integer Mã giảng viên, khóa chính
2 HoTenGiangVien Character 50 Họ tên giảng viên
4 Mahocham Character 5 Mã học hàm
5 Mahocvi Character 5 Mã học vị
6 Madonvi Integer Mã đơn vị
Bảng 3.5 Bảng giảng viên d Bảng THEODOI dùng để lưu thông tin theo dõi, có cấu trúc:
STT Tên trường Kiểu dữ liệu Kích cỡ Ghi chú
1 Idkt Integer Mã kiểm tra, khóa chính
2 Ngaykiemtra Date Ngày kiểm tra
3 Maphonghoc Character 4 Mã phòng học
4 Mamonhoc Character 8 Mã môn học
5 Magiangvien Integer Mã giảng viên
Bảng 3.6 Bảng theo dõi e Bảng MONHOC dùng để lưu thông tin của môn học, có cấu trúc:
STT Tên trường Kiểu dữ liệu Kích cỡ Ghi chú
1 Mamonhoc Character 8 Mã môn hoc, khóa chính
2 Tenmonhoc Character 100 Tên môn học
3 Sotinchi Integer Số tín chỉ
Giới thiệu ứng dụng
a Xây dựng ứng dụng, sử dụng hệ quản trị cơ sở dữ liệu PostgreSQL Với các tiêu chí:
- Kết quả kiểm tra việc thực hiện giờ lên lớp của tất cả các giảng viên
- Báo cáo tình hình ra vào lớp hàng ngày của từng giảng viên
- Báo cáo thống kê việc thực hiện giờ lên lớp của giảng viên theo đơn vị
- Thống kê số lƣợt giáo viên ra sớm vào muộn từng đơn vị b.Thông tin kỹ thuật:
- Ứng dụng đƣợc viết bằng ngôn ngữ lập trình HTML, CSS3, JavaScript, PHP
- Hệ quản trị cơ sở dữ liệu: PosgreSQL
Tạo cơ sở dữ liệu và các truy vấn SQL cho ứng dụng
3.4.1.Tạo cơ sở dữ liệu cho ứng dụng a Tạo cơ sở dữ liệu:
Click chuột phải vào Databases chọn New Databases nhƣ hình:
Hình 3.2 Tạo cơ sở dữ liệu
- Thiết lập thông số cho cơ sở dữ liệu:
- Name: Nhập tên cho cơ sở dữ liệu là “ QLGV”
- Owner: Chọn người sử dụng có quyền thao tác trên cơ sở dữ liệu
Hình 3.3 Thiết lập thông số cho cơ sở dữ liệu
- Nhấn OK để hoàn tất b Tạo bảng cho cơ sở dữ liệu
- Nhấp chọn QLGV > Schemas > public > click chuột phải Table chọn
- Thiết lập thông số cho bảng
- Name: Nhập tên cho bảng là “ TheoDoi”
- Owner: Chọn người sử dụng có quyền thao tác trên bảng
Hình 3.4 Thiết lập thông số cho bảng
- Click vào tab Columns, chọn add để tạo cột
- Thiết lập thông số cho cột:
Name: Nhập tên của cột cần tạo, ở đây ta tạo cột “Ghi chú”
Data Type: Chọn kiểu dữ liệu thích hợp cho cột
Length: Chiều dài tối đa của cột
- Nhấn OK để hoàn tất
Hình 3.5 Thiết lập thông số cho cột
Click vào tab Constraints để tạo khóa chính, khóa ngoại cho bảng:
Hình 3.6 Tạo khóa chính, khóa ngoại
- Chọn primary key để tạo khóa chính > nhấn add, ta đƣợc nhƣ hình:
Hình 3.7 Tạo khóa chính cho bảng
Column: Cho phép chọn cột để đặt làm khóa chính
Nhấn add để thêm khóa chính > Nhấn OK để hoàn tất
- Chọn Foreign Key để tạo khóa phụ > nhấn Add ta đƣợc hình:
References: Chọn bảng mà ta sẽ tham chiếu
Local column: Chọn cột có sẵn trong bảng mà ta đang tạo khóa
Referencing: Chọn khóa chính trong bảng mà ta sẽ tham chiếu
Nhấn add để thêm khóa ngoại > Nhấn OK để hoàn tất
Hình 3.8 Tạo khóa ngoại cho bảng
Sau khi tạo cơ sở dữ liệu xong, ta bắt đầu import dữ liệu cho các bảng đã tạo:
- Nhấp chọn QLGV > Schemas > public > Table > Click chuột phải vào bảng cần import > chọn “Import”
Hình 3.9 Import dữ liệu vào các bảng
Filename: Nhấn Browse để chọn đường dẫn đến dữ liệu mà ta cần import
Format: Chọn định dạng cho dữ liệu cần import
Encoding: Chọn bảng mã cho dữ liệu
Nhấn Import để hoàn tất
Sau khi import dữ liệu từ exel cho cơ sở dữ liệu ta đƣợc các bảng sau: o Bảng DonVi:
Hình 3.10 Dữ liệu bảng Đơn Vị o Bảng GiangVien:
Hình 3.11 Dữ liệu bảng Giảng Viên o Bảng MonHoc:
Hình 3.12 Dữ liệu bảng Môn Học o Bảng PhongHoc:
Hình 3.13 Dữ liệu bảng Phòng Học o Bảng TheoDoi:
Hình 3.14 Dữ liệu bảng Theo Dõi
3.4.2 Các truy vấn SQL cho ứng dụng a Tạo câu lệnh SQL đƣa ra kết quả kiểm tra thực hiện giờ lên lớp của giảng viên gồm có các cột: ngày kiểm tra, phòng học, họ tên giảng viên, đơn vị, tiết dạy, vào muộn, ra sớm, ghi chú: o Câu lệnh SQL:
"TheoDoi"."Ngaykiemtra" as " Ngày kiểm tra",
"TheoDoi"."Maphonghoc" as " Mã phòng học",
"MonHoc"."Tenmonhoc" as " Tên môn học",
"GiangVien"."Hotengiangvien" as "Họ tên giảng viên",
"DonVi"."Tendonvi" as " Tên đơn vị",
"TheoDoi"."Tietday" as "Tiết dạy",
"TheoDoi"."Vaomuon" as "Vào muộn",
"TheoDoi"."Rasom" as "Ra sớm",
"TheoDoi"."Ghichu" as "Ghi chú"
FROM public."DonVi", public."GiangVien", public."MonHoc", public."TheoDoi"
"DonVi"."Madonvi" = "GiangVien"."Madonvi" AND
"GiangVien"."Magiangvien" = "TheoDoi"."Magiangvien" AND
"MonHoc"."Mamonhoc" = "TheoDoi"."Mamonhoc" o Kết quả:
Để theo dõi tình hình ra vào của giảng viên Phạm Sỹ Tâm thuộc đơn vị Giáo viên thỉnh giảng, cần tạo câu lệnh SQL để báo cáo Bảng báo cáo sẽ bao gồm các cột: Ngày kiểm tra, Phòng học, Môn học, Tiết dạy, Vào muộn, Ra sớm và Ghi chú Câu lệnh SQL sẽ giúp thu thập và trình bày thông tin một cách rõ ràng và hiệu quả.
"TheoDoi"."Ngaykiemtra" as " Ngày kiểm tra",
"TheoDoi"."Maphonghoc" as " Phòng học",
"MonHoc"."Tenmonhoc" as " Tên môn học",
"TheoDoi"."Tietday" as "Tiết dạy",
"TheoDoi"."Vaomuon" as " Vào muộn",
"TheoDoi"."Rasom" as " Ra sớm",
"TheoDoi"."Ghichu" as " Ghi chú"
FROM public."TheoDoi", public."GiangVien", public."MonHoc", public."DonVi"
"TheoDoi"."Magiangvien" = "GiangVien"."Magiangvien" AND
"TheoDoi"."Mamonhoc" = "MonHoc"."Mamonhoc" AND
"DonVi"."Madonvi" = "GiangVien"."Madonvi" AND
"GiangVien"."Hotengiangvien" LIKE '%Phạm Sĩ Tâm%' AND
"DonVi"."Tendonvi" LIKE '%Giáo viên thỉnh giảng%'; o Kết quả:
Kết quả giảng viên cho thấy việc tạo câu lệnh SQL để báo cáo thống kê giờ lên lớp của tất cả giảng viên thuộc Đơn Vị: Giáo viên thỉnh giảng Yêu cầu bao gồm tính tổng số lần ra sớm, vào muộn, cũng như tổng số phút ra sớm và vào muộn Dưới đây là câu lệnh SQL thực hiện yêu cầu này.
"TheoDoi"."Magiangvien" as " Mã giảng viên",
"GiangVien"."Hotengiangvien" as " Họ tên giảng viên",
COUNT("TheoDoi"."Vaomuon") as "Số lần vào muộn",
COUNT("TheoDoi"."Rasom") as "Số lần ra sớm",
(COUNT("TheoDoi"."Vaomuon") + COUNT("TheoDoi"."Rasom")) as " Tổng số lần",
SUM("TheoDoi"."Vaomuon") as "Tổng số phút muộn",
SUM("TheoDoi"."Rasom") as "Tống số phút sớm",
"TheoDoi"."Ghichu" as " Ghi chú "
FROM public."DonVi", public."GiangVien", public."TheoDoi"
"DonVi"."Madonvi" = "GiangVien"."Madonvi" AND
"GiangVien"."Magiangvien" = "TheoDoi"."Magiangvien" AND
"DonVi"."Tendonvi" LIKE '%Giáo viên thỉnh giảng%'
GROUP BY "TheoDoi"."Magiangvien" , "GiangVien"."Hotengiangvien",
Hình 3.17 trình bày thống kê lượt ra sớm và muộn theo từng đơn vị Để tạo câu lệnh SQL nhằm tính tổng số lượt ra sớm và muộn của từng đơn vị, bạn có thể sử dụng câu lệnh SQL sau:
"DonVi"."Tendonvi" as " Tên đơn vị ",
(COUNT("TheoDoi"."Vaomuon") + COUNT("TheoDoi"."Rasom")) as "Tổng số lượt"
FROM public."DonVi", public."GiangVien", public."TheoDoi"
"DonVi"."Madonvi" = "GiangVien"."Madonvi" AND
GROUP BY "DonVi"."Madonvi" o Kết quả:
Hình 3.18 Thống kê đơn vị e Các hàm của PostgreSQL trong PHP
Kết nối từ php tới cơ sở dữ liệu “QLGV” với host:”localhost”, user:
To connect to a PostgreSQL database, use the following parameters: host as 'localhost', port as '5432', database name as 'QLGV', user as 'postgres', and password as '666666' Execute SQL commands such as SELECT, UPDATE, or DELETE by using the pg_query function to send requests to the server and wait for the results.
Pg_query_params: Thực thi truy vấn kèm tham số truyền vào
Pg_fletch_rows: Liệt kê dữ liệu nhận đƣợc ra bảng
Ví dụ: Tìm kiếm giảng viên theo tên giảng viên, và đƣa ra tất cả thông tin của giảng viên đó từ bảng giảng viên
$dbconn = pg_connect("host='localhost' port='5432' dbname='QLGV' user='postgres' password='666666'");
$sql = 'SELECT * FROM public."GiangVien" WHERE
$st1 ="Phạm Sĩ Tâm"; pg_query("set names 'utf8'");
$result = pg_query_params($dbconn,$sql,array ("%".$st1."%"));
//$result = pg_query($dbconn, 'SELECT * FROM "GiangVien" WHERE
"GiangVien"."Hotengiangvien" like %'.$st1.'%'); if (!$result) { echo "An error occurred.\n"; exit;
The code retrieves and displays instructor information from a database, including the instructor's ID, name, gender, academic rank code, degree code, department code, and email address Each instructor's details are presented on a new line for clarity.
Hình 3.19 Kết quả tìm kiếm giảng viên
Một số giao diện chính
Hình 3.20 Giao diện đăng nhập b Giao diện trang chủ
Hình 3.21 Giao diện trang chủ c Giao diện trang thực hiện giờ lên lớp của giảng viên theo đơn vị
Hình 3.22 Giao diện tra cứu đơn vị d Giao diện trang báo cáo tình hình ra vào lớp của giảng viên
- Nhập tên giảng viên cần xem
Hình 3.23 Giao diện tra cứu giảng viên
- Tình hình ra vào lớp của giảng viên cần tìm
Hình 3.24 Kết quả giảng viên e Giao diện trang báo cáo tình hình ra vào lớp của giảng viên
Hình 3.25 Giao diện thống kê giảng viên f Giao diện trang báo cáo tình hình ra sớm vào muộn theo từng đơn vị
Hình 3.26 Giao diện thông kê đơn vị