QUESTIONS? CALL: (+84) 24 666 026 12

HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

HiveTech is a technology company focus on AI and big data technologies for educational purposes.

T (+84) 24 666 026 12
Email: contact@hivetech.vn

HiveTech JSC
No. 3 Thanh Cong, Ba Dinh, Ha Noi

Open in Google Maps
  • HOME
  • SERVICES
  • OUR COMPANY
  • PARTNERS
  • CONTACT
  • RECRUITMENT
FREEQUOTE
  • Home
  • 2020
  • April
2021-03-06

DATABASE THỰC CHIẾN

Monday, 27 April 2020 by Thao Nguyen










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.
    • Lưu trữ ngày sinh: chọn kiểu DATE, cần kiểm tra định dạng lưu Date của Oracle Db, thường khách hàng muốn lưu trữ theo cách nước họ hay dùng, muốn đổi format ta cần dùng các hàm xử lý, kiểm tra định dạng mặc định tại đây và đâ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.
  • 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

Read more
  • Published in Technology
No Comments

Recent Posts

  • Fresher/Junior Tester

    1. Mô Tả Công Việc Phân tích yêu cầu dự án phần...
  • Java Servlet Filter

    I. Các tình huống  1. Người dùng yêu cầu m...
  • Front-End và Back-End giao tiếp như thế nào?

    I. Vấn đề xảy ra khi không giao tiếp – Tô...
  • Intern tại HiveTech có gì hay?

    Chào các bạn! Mình là Hiếu, tranh thủ vừa đóng ...
  • Designer (UI/UX)

    1. Mô Tả Công Việc Nghiên cứu tìm hiểu, cập nhậ...

Recent Comments

  • hivequeen on [Tuyển Dụng] Junior/Fresher Frontend Developers (jQuery, Angular, VueJS, ReactJS)
  • nguyễn viết đạt on [Tuyển Dụng] Junior/Fresher Frontend Developers (jQuery, Angular, VueJS, ReactJS)

Archives

  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • September 2019
  • July 2019
  • June 2019

Categories

  • Networking
  • Posts
  • Recruitment
  • Sale
  • Technology
  • Uncategorized

Meta

  • Log in
  • Entries feed
  • Comments feed
  • WordPress.org

Featured Posts

  • Fresher/Junior Tester

    0 comments
  • Java Servlet Filter

    0 comments
  • Front-End và Back-End giao tiếp như thế nào?

    0 comments
  • Intern tại HiveTech có gì hay?

    0 comments
  • Designer (UI/UX)

    0 comments
  • DISCLAIMER
  • SUPPORT POLICY
  • LEGAL
HiveTech Vietnam (Technology Solutions - Original Ideas - Shared Expertise)

© HiveTech 2019 All rights reserved

TOP