
Phần I: Cấu trúc bảng và cách viết truy vấn
1. Giới thiệu công nghệ sử dụng trong một dự án mình tham gia
Mình tham gia dự án cho một ngân hàng. Dự án viết một ứng dụng web để quản lý một module về khách hàng.
- Công nghệ sử dụng: Java 1.7, Oracle Database 12G Enterprise. Framework front-end: kendoUI for jQuery 2015.
- Trong bài viết này tập trung về:
- Dữ liệu kendoUI cần để hiển thị data dạng Grid, Combobox, Tree List.
- Cách viết đáp ứng yêu cầu kendoUI.
- Bỏ qua cách Java gọi vào database để lấy dữ liệu.
- Để cài đặt nhanh nhất dùng bản Oracle express 12G và cài SQL Client: dbForge for Oracle Express.
Qua mỗi dạng dữ liệu mình làm theo từng bước tìm từ khóa để tìm hiểu các cấu trúc bảng đó, lúc làm dự án là lần đầu biết được các kiến thức đó.
2. Front-end cần những dạng data để hiển thị
- Dùng các component KendoUI: Grid, Tree List và Combobox
- Trang web KendoUI: https://docs.telerik.com/kendo-ui/controls/data-management/grid/overview
- Dạng Grid:

- Dạng Tree:

- Combobox:

3. Cấu trúc bảng và cách viết truy vấn
3.1. Dạng Grid
- Yêu cầu task: Hiển thị tất cả thông tin của khách hàng.
- Cấu trúc bảng trong database:

- Dữ liệu hiển thị trên KendoGrid:

- Phân tích:
- Tên trường thường thống nhất đặt viết Hoa và cách nhau bởi dấu gạch dưới “_”, đặt đầy đủ nghĩa ví dụ “CUSTOMER_ID” – định danh cho một customer và “pre-fix” là tên bảng hoặc chữ cái đầu tiên của mỗi từ tên bảng.
- Mỗi bảng cần phải có một trường định danh cho customer, chọn CUSTOMER_ID.
- CUSTOMER_ID: thường dạng ID tự tăng, dùng sequence. Hoặc ID kết hợp chuỗi C01, C02.
- Lưu trữ về giới tính dùng kiểu NUMBER(1), CHAR(1), hiện tại chưa có cách lưu nào là tối ưu nhất, mỗi cách thường có ưu và nhược điểm điểm riêng, từ khóa: “type to save gender oracle db”, tham khảo tại đây.
- Dữ liệu bảng CUSTOMER:

- Tạo truy vấn:
- Format date dạng ngày/tháng/năm 12/02/1996: dùng TO_CHAR để format và chuyển đổi kiểu text. Thống nhất thường là database sẽ làm.
- CUSTOMER_GENDER: thường bên Java tùy theo dữ liệu “f,m,o” dùng ENUM tương ứng hoặc database xử lý.hoặc client sẽ xử lý.
- Từ khóa: “format date oracle db”, “how switch value oracle db” > cách chuyển đổi “f,m,o” về Nữ(f), Nam(m), Khác(o)

3.2. Dạng tree:
- Yêu cầu task: Hiển thị danh sách nhân viên theo một người quản lý.
- Khách hàng muốn hiển thị dạng tree, ấn vào tên quản lý sẽ hiển thị các nhân viên bên trong. Theo cấu trúc cty của khách hàng có nhiều cấp của quản lý.
- Demo hiển thị trên kendoUI:

- Phân tích:
- Cần có filed lưu trữ thông tin cơ bản của nhân viên và cần thêm một cột để xem nhân viên đó thuộc người quản lý nào.
- Làm thế nào có thể lưu trữ nhiều cấp quản lý.
- Nếu khách hàng muốn thay đổi cách hiển thị: ví dụ với cấp quản lý chỉ hiển thị First Name, cấp thấp nhất hiển thị Full Name thì làm thế nào?
- Cấu trúc bảng: EMPLOYEE

- Tạo truy vấn:
- Kết quả trả về dạng: 1 Manager – * Employee, đến Maganer thức 2, dạng cấu trúc nhiều tầng, nhìn kết quả thấy được mối liên kết với nhau.
- Lấy đầy đủ tên FULL_NAME viết hoa chữ cái đầu mỗi từ, HIRE_DATE dạng “17-JUN-2020”.
- POSITION: dữ liệu được viết hoa, Sắp xếp theo POSITION: CEO vị trí 1 và FULL_NAME

- Đánh giá: truy vấn này đã phức tạp hơn
- Dùng function có sẵn của Oracle DB:
- Xử lý khoảng trắng TRIM()
- Viết hoa chữ cái đầu INITCAP()
- Viết hoa UPPER(),
- Lồng Function trong function
- Định dạng DATE
- Sắp xếp theo giá trị có sẵn DECODE()
- Dùng từ khóa mới START WITH, ORDER SIBLINGS BY, CONNECT BY PRIOR cho cấu trúc dạng tree.
- Dùng function có sẵn của Oracle DB:
- Từ khóa: “upper first character oracle db”, “custom-order-in-oracle-sql”, “oracle db tree struct”, “Hierarchical Queries Oracle db”
- Hiển thị trên kendoTreeList:

4. Tổng hợp
- Với các dạng bảng và yêu cầu của khách hàng, ta phải hiểu yêu cầu của task, rồi tưởng tượng dạng bảng thế nào, sau đó theo từ khóa được nghĩ ra rồi tìm kiếm trên Google.
- Yêu cầu phức tạp câu truy vấn không đơn giản chỉ SELECT từ một bảng, phải “cook” dữ liêu theo cách mong muốn.
- Biết dùng các hàm “build-in” của database, tùy từng loại database có những hàm xử lý text, number, dùng regex, tương tự nhau. Biết dùng các hàm đó & có thể lồng “fun-in-fun”
- Hiểu được một framework Front-End hoạt động, cách sử dụng document, sử dụng tool.
Trần Mạnh Chung