LVTN công cụ thiết kế CSDL online- tập trung nghiêu cứu xây dựng một công cụ hỗ trợ thiết kế cơ sở dữ liệu trên nền tảng web

87 917 0
LVTN công cụ thiết kế CSDL online- tập trung nghiêu cứu xây dựng một công cụ hỗ trợ thiết kế cơ sở dữ liệu trên nền tảng web

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Mục lục CHƯƠNG 1: TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ .4 1.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ .4 1.3 PHẠM VI CỦA ĐỀ TÀI 1.4 PHƯƠNG PHÁP NGHIÊN CỨU VÀ GIẢI QUYẾT VẤN ĐỀ CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 2.1 MƠ HÌNH DỮ LIỆU QUAN NIỆM (cdm)[1] 2.1.1 Các đối tượng mơ hình liệu quan niệm 10 2.1.2 Các bước xây dựng mơ hình liệu quan niệm 13 2.1.3 Chuyển từ mơ hình liệu quan niệm sang mơ hình vật lý (PDM) 14 2.1.4 Mysql 16 2.2 FRAMEWORK GWT 20 2.2.1 Tổng quan tập hợp công cụ cao cấp GWT [2] 20 2.2.2 Các chức GWT .22 2.3 GOOGLE APP ENGINE VÀ DATASTORE[4] 34 2.3.1 Google App Engine .34 2.3.2 Datastore 35 2.4 SỬ DỤNG OAUTH 2.0 ĐỂ TRUY CẬP CÁC GOOGLE API .37 CHƯƠNG 3: NỘI DUNG NGHIÊN CỨU VÀ KẾT QUẢ 47 3.1 PHÂN TÍCH YÊU CẦU 47 3.1.1 Yêu cầu chức năng: 47 3.1.2 Yêu cầu phi chức 48 3.2 THIẾT KẾ TỔNG QUAN 49 3.2.1 Kiến trúc phần mềm 49 3.2.2 Mơ hình triển khai ứng dụng 51 SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ 3.2.3 Giải vấn đề đồ họa 52 3.3 LƯU TRỮ SƠ ĐỒ .64 3.3.1 Cấu trúc file xml 64 3.3.2 Sử dụng datastore lưu trữ .66 3.4 CÁC GIẢI THUẬT CHUYỂN ĐỔI GIỮA CÁC LƯU ĐỒ 70 3.4.1 Giải thuật chuyển từ CDM sang PDM .70 3.4.2 Giải thuật chuyển từ PDM sang Mysql 77 3.5 XÁC THỰC VÀ CHỨNG THỰC KHI TRUY CẬP GOOGLE API 83 3.6 KẾT QUẢ 84 CHƯƠNG 4: TỔNG KẾT 86 4.3 KẾT QUẢ ĐẠT ĐƯỢC 86 4.4 HẠN CHẾ 86 4.5 HƯỚNG PHÁT TRIỂN 87 SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ DANH MỤC TỪ VIẾT TẮT STT Từ viết tắt / thuật ngữ Giải thích CSDL Cơ Sở Dữ Liệu API Application Programming Interface GWT Google Web Toolkit XML Extensible Markup Language HTML HyperText Markup Language SQL Structured Query Language UML Unified Modeling Language CDM Conceptual Data Model PDM Physical Data Model 10 PHP 11 JSNI Hypertext Preprocessor Javascript native interface SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ CHƯƠNG 1: TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ Điện tốn đám mây cơng nghệ nói đến nhiều năm Trước đây, phát triển web 2.0 làm tăng khả tương tác với người dùng làm phát sinh ý tưởng phần mềm dịch vụ Môt phần mềm chạy tảng web, người dùng truy cập sử dụng lúc nơi mà không quan tâm tới vấn đề cài đặt, bảo trì, nâng cấp Một phần mềm độc lập với tảng chí thiết bị Một điều thú vị cách toán sử dụng sản phẩm, không giống ngành kinh doanh phần mềm truyền thống, thay phải mua trọn gói người dùng chi trả chi phí cho sử dụng, tính theo tháng, theo hay theo dịch vụ tùy nhà cung cấp Đến thời đại điện tốn đám mây, khơng cịn ý tưởng mà trở thành xu hướng Một xu hướng mới, xu hướng tác động mạnh đến công nghệ phần mềm, làm thay đổi cách mà người ta phát triển ứng dụng, cách mà người ta kinh doanh phần mềm Xu hướng xuất phát từ ứng dụng doanh nghiệp CRM salesforce.com hay ERP… Ngày nhà cung cấp dịch vụ đám mây công cộng xây dựng cho nhà phát triển họ môi trường phát triển trực tuyến (online) công cụ Visualforce Salesforce hay theo infoworld, môi trường phát triển ứng dụng dựa tảng web Orion tổ chức Eclipse hy vọng tương lai không xa thay công cụ phát triển truyền thống Theo xu hướng đó, nhóm thực đề tài đề xuất ý tưởng nghiên cứu, thiết kế, cài đặt cơng cụ hỗ trợ việc mơ hình hóa giai đoạn phân tích thiết kế phần mềm dựa tảng web với cơng nghệ điện tồn đám mây 1.2 LỊCH SỬ GIẢI QUYẾT VẤN ĐỀ Trước đây, cơng cụ mơ hình hóa mạnh chủ yếu tảng Window Powerdesigner Sybase hay Rational Rose IBM Đây điều công cụ phổ biến, mạnh mẽ đa số ứng dụng desktop phụ thuộc vào tảng, giá thành tương đối cao Và quen sử dụng chúng lại phải thay đổi tảng sử dụng ví dụ từ window sang Ubuntu hay thiết bị di động máy tính bảng khó để có ứng dụng tương tự Chúng ta phải tích lũy kinh nghiệm từ đầu sử dụng cơng cụ hồn tồn với chưa chúng hỗ trợ tốt công cụ trước Và điều dự án kéo dài năm việc sử dụng công cụ tháng công cụ buộc phải mua quyền cho năm thật lãng phí Đối với việc cộng tác có số khó khăn, SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ cần chia sẻ mơ hình với vấn đề việc chia sẻ, cập nhật trao đổi mơ hình cần thường xun, liên tục thường theo truyền thống phải gặp công cụ online thường hỗ trợ làm việc tốt Các mơ hình lưu trữ online đồng hóa với client cần thiết Hiện nay, theo nhóm nghiên cứu khảo sát, có số cơng cụ cho phép vẽ online như: Paint Google, lucidchart.com … công cụ chủ yếu chuyên vẽ sơ đồ chưa có chức hỗ trợ cho phép chuyển đổi sơ đồ hay tự động sinh mã nguồn từ sơ đồ Chưa phải công cụ chuyên biệt hỗ trợ cho lĩnh vực thiết kế phần mềm Trong đề tài này, tập trung nghiêu cứu xây dựng công cụ hỗ trợ thiết kế sở liệu tảng web Cụ thể nhóm nghiên cứu phải: • Nghiên cứu thao tác thiết kế sở liệu, bao gồm mơ hình CDM, PDM quy tắc chuyển đổi từ CDM sang PDM • Nghiên cứu khả đồ họa tảng web trình duyệt, thiết kế giải thuật đồ họa để xây dựng công cụ cho phép người dùng vẽ mơ hình • Dựa ngun tắc chuyển đổi nghiên cứu, thiết kế cài đặt giải thuật chuyển đổi từ mơ hình CDM sang PDM, PDM sang mã nguồn Sql Mysql 5.0 • Nghiên cứu tìm giải pháp lưu trữ mơ hình, cho phép người dùng lưu trữ mơ hình mở để chỉnh sửa cần • Nghiên cứu triển khai ứng dụng tảng điện toán đám mây Google App Engine Google 1.3 PHẠM VI CỦA ĐỀ TÀI Trong đề tài trình bày trình xây dựng ứng dụng thiết kế mơ hình sở liệu trực tuyến Chương trình hỗ trợ người dùng vẽ mơ hình liệu ngữ cảnh mơ hình liệu vật lý, cho phép chuyển từ mơ hình liệu ngữ cảnh sang mơ hình liệu vật lý, chuyển từ mơ hình liệu vật lý sang mã nguồn SQL tương thích với Mysql5.0 Các vấn đề đặt đồ họa web, khả tương tác linh hoạt với người dùng, lưu trữ sơ đồ, cài đặt giải thuật đồ họa, khả lưu trữ mơ hình, cài đặt giải thuật chuyển đổi mơ hình, khả tương thích với nhiều trình duyệt tốc độ xử lý SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Về vấn đề đồ họa khả tương tác linh hoạt, chương trình cho phép người dùng vẽ thực thể mối quan hệ, cho phép kéo thả, thay đổi kích thước thực thể Đây nhược điểm lớn ứng dụng web trước mà phải nhờ hỗ trợ flash hay applet Nhưng ứng dụng không sử dụng flash applet tìm giải pháp khác cho vấn đề Vấn đề tính tương thích vấn đề mấu chốt việc xây dựng ứng dụng web Đặc biệt ứng dụng này, để đồ họa IE dùng ngôn ngữ Vector Graphiscs Markup trình duyệt khác Chrome, Firefox sử dụng ngôn ngữ Scalable Vector Graphics Giải pháp cho vấn đề đề xuất chi tiết phần sau Sản phẩm cuối đề tài chương trình demo có chức 1.4 PHƯƠNG PHÁP NGHIÊN CỨU VÀ GIẢI QUYẾT VẤN ĐỀ Trong trình nghiên cứu, tìm kiếm giải pháp đồ họa web, nhóm định chọn GWT Framework gói thư viện SmartGwt Đây framework mã nguồn mở ngôn ngữ java hỗ trợ lập trình phía client Framework hỗ trợ mạnh cho việc tương thích với nhiều trình duyệt khả tương tác Chúng ta thảo luận nhiều framework chương sở lý thuyết Ngôn ngữ xml ngôn ngữ thích hợp để lưu trữ mơ hình Nhóm chọn xml framework có phần hỗ trợ đọc viết tài liệu xml, giúp cho việc lập trình tiện lợi Ngồi cơng nghệ lựa chọn tương thích với đám mây Google App Engine Google Đám mây hỗ trợ công nghệ java, nên dự án chuyển khai lên đám mây dễ dàng chỉnh sửa lại để chạy đám mây khác SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Kế hoạch làm việc nhóm sau: Thời gian Cơng việc 3/1/2012 đến 3/2/2012 Tìm kiếm nghiên cứu thử nghiệm giải pháp cho đồ họa web như: thư viện JavaScript Closure library, framework Railto, SVG Editor, framework GWT, thư viện Smartgwt 3/2/2012 đến 10/2/2012 Thiết kế cấu trúc file xml cho sơ đồ CDM, PDM 10/2/2012 đến 20/2/2010 Xây dựng khung chương trình 20/2/2012 đến 2/4/2012 Nghiên cứu thiết kế giải thuật đồ họa cho thực thể, mối quan hệ, xử lý kiện bao gồm:  Giải phương trình tốn học tìm cơng thức tổng qt hỗ trợ đồ họa mơ hình  Cài đặt giải thuật đồ họa  Xây dựng gói đồ họa CDM 2/4/2012 đến 9/4/2012 Xây dựng gói PDM 9/4/2012 đến 20/4/2012 Hồn thành gói chuyển từ CDM sang PDM bao gồm:  Xuất từ mơ hình đồ họa CDM, PDM sang file xml  Nhập file xml thành mơ hình đồ họa CDM, PDM  Cài đặt giải thuật chuyển tài liệu xml CDM thành tài liệu xml PDM 20/4/2012 đến 25/4/2012 Hồn thành gói chuyển từ PDM sang mã nguồn sql Mysql 5.0 25/4/2012 đến 30/4/2012 Cài đặt gói lưu trữ sơ đồ hệ sở liệu Datastore Google App Engine Cài đặt cho phép người dùng đăng nhập tài khoản Gmail Google SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online 30/4/2012 đến 5/4/2012 GVHD: Ts.TRẦN CAO ĐỆ Hồn thiện chương trình, tài liệu Phân cơng cơng việc:  Lê Trần Phúc: • Nghiên cứu cấu trúc câu lệnh sql Mysql 5.0 • Nghiên cứu kỹ thuật phân tích tập tin xml • Xây dựng giải thuật chuyển đổi tập tin xml PDM sang mã nguồn sql • Cài đặt gói chuyển từ PDM sang mã nguồn sql tương thích với Mysql 5.0 • Thiết kế hình ảnh, tập tin css tăng tính thân thiện người dùng ứng dụng  Đinh Hồng Lương: • Xây dựng khung chương trình • Thiết kế cài đặt giải thuật đồ họa cho gói CDM PDM • Cài đặt chức xuất mơ hình CDM, PDM tài liệu xml, nhập từ tài liệu xml sang mơ hình đồ họa • Cài đặt giải thuật chuyển đổi từ mơ hình CDM sang mơ hình PDM • Cài đặt lớp Jdo cho phép lưu tài khoản người dùng mơ hình vào datastore Google App Engine • Cài đặt chức cho phép người dùng đăng nhập tài khoản Gmail SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ CHƯƠNG 2: CƠ SỞ LÝ THUYẾT Chương giới thiệu sở lý thuyết sử dụng đề tài Phần nói đến mơ hình sở liệu, lệnh sql hệ quản trị sở liệu Mysql 5.0, framework GWT, Google App Engine, datastore cách lưu trữ sở liệu đám mây google cách xác thực chứng thực người dùng sử dụng giao thức Oauth 2.0 để truy cập API google Trong chương giới thiệu tổng quan không sâu vào chi tiết ứng dụng vào đề tài, vấn đề đề cập chương sau Trước hết, nghiên cứu mơ hình liệu quan hệ, để thấy yêu cầu, chức mà chương trình hỗ trợ mơ hình hóa phải đạt Tiếp theo phần giới thiệu tổng quan framework GWT, Google App Engine, công nghệ kết hợp với tốt chúng sản phẩm Google, cơng nghệ ứng dụng chương trình Kế tiếp phần giới thiệu datastore, cổ máy lưu trữ đám mây google, sử dụng cho sản phẩm, dịch vụ google Cuối phần sở lý thuyết cách thức mà giao thức OAUTH 2.0 làm việc, để giúp ta xây dựng chức đăng nhập tài khoản Gmail Giờ bắt đầu phần 2.1 MƠ HÌNH DỮ LIỆU QUAN NIỆM (CDM)[1] Việc thiết kế sở liệu (CSDL) thường mức quan niệm Với mức quan niệm không cần xem xét đến chi tiết việc thực mức luận lý Mô hình liệu quan niệm mơ tả cấu trúc luận lý CSDL, độc lập với phần mềm hay cấu trúc liệu Mơ hình quan niệm thường chứa đối tượng liệu chưa thực CSDL mức luận lý Mô hình cho ta mơ tả hình thức liệu cần thiết cho việc thực thi hoạt động kinh doanh, xí nghiệp hay cơng ty Mơ hình CDM cho phép:  Mơ tả tổ chức liệu dạng sơ đồ quan hệ thực thể (ERDEntity Relationship Diagram)  Kiểm tra hợp lệ việc thiết kế liệu  Sinh mơ hình liệu vật lý (PDM – Physical Data Model)  Sinh mô hình hướng đối tượng (OOM – Oriented Model) SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page LVTN: Công Cụ Thiết Kế CSDL Online 2.1.1 GVHD: Ts.TRẦN CAO ĐỆ Các đối tượng mơ hình liệu quan niệm Các đối tượng CDM bao gồm kiểu thực thể (entity), quan hệ (relationship), thuộc tính (attribute), miền trị (domain), nhận dạng (indentifier ), … 2.1.1.1 Kiểu thực thể (Entity types) Kiểu thực thể đối tượng hay khái niệm giới thực xác định tố chức tồn độc lập Ví dụ đối tượng Nhan_Vien, Khach_Hang, Hang_hoa,… hay khái niệm trừu tượng Mon_hoc, Loai_hang, Giao_dich,… Thực thể thể kiểu thực thể mà xác định cách Ví dụ, nhân viên cụ thể thực thể kiểu thực thể Nhan_vien, nhân viên xác định thông qua mã số nhân viên Chúng ta phân loại kiểu thực thể thành hai loại: kiểu thực thể yếu kiểu thực thể mạnh Kiểu thực thể yếu (weak entity types): kiểu thực thể tồn phụ thuộc vào kiểu thực thể khác (Kiểu thực thể yếu chứa thuộc tính hay khơng chứa thuộc tính, có khóa hay khơng có khóa chính) Kiểu thực thể mạnh (strong entity types): kiểu thực thể mà tồn khơng phụ thuộc vào kiểu thực thể khác 2.1.1.2 Các kiểu quan hệ (Relationship Types) Một kiểu quan hệ xác định mối quan hệ hai kiểu thực thể Các kiểu quan hệ có:  to one: One  to many: One SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 10 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ 1) Giải thuật thực thi với điều kiện endHead có kiểu 1, startHead tùy ý: Dòng code thứ giúp lấy column bảng cuối mối quan hệ, hay nói cách khác bảng tham chiếu tới Vòng lặp từ đến 23 duyệt column, column khóa thêm cột vào bảng đầu mối quan hệ (bảng tham chiếu) khóa ngoại, trường hợp có phụ thuộc hàm thêm cột khóa chính, tiếp tục thêm vào bảng tham chiếu đến bảng tham chiếu cách gọi hàm addMainkey đề cập trước Chúng ta ý, dịng code lấy cột bảng cuối mối quan hệ Vì mơ tả bảng giải thuật trên, lấy cột khóa endEntity thêm vào startEntity làm khóa dịng code 19 thêm vào khóa ngoại null 2) Giải thuật thực endHead 1…1 startHead tùy ý SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 73 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Giải thuật giống giải thuật 1, khác dịng 19 thay cho phép khóa ngoại null trường hợp khơng có phép khóa ngoại null Và ý trường hợp có endHead startHead có kiểu 1 có phụ thuộc hàm ta kéo phía có phụ thuộc hàm Theo mặc định ban đầu ta kéo phía startEntity nên ta thêm đoạn code sau để giao hoán startEntity endEntity xảy trường hợp //có phụ thuộc hàm phải kéo phụ thuộc hàm if(relationnode.getAttribute("dependent").equals("2")) { Element extra = starttable; starttable = endtable; endtable = extra; } 3) 4) Giải thuật thực endHead n n startHead 1 trường hợp hợp lại thành trường hợp cài đặt SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 74 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Dòng thứ cho ta thấy đoạn code duyệt phần tử column stardEntity đưa vào endEntity Dịng 12 đến dịng 23 cho thấy, có phụ thuộc hàm thêm vào endEntity dạng khóa chính, cịn ngược lại dạng khóa ngoại SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 75 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ 5) Trường hợp trường hợp phức tạp phải tạo table xử lý vấn đề vị trí cho nó, thêm khóa bảng vào cho lúc trước có mối quan hệ bên CDM thành mối quan hệ tham chiếu bên PDM ta phải khởi tạo mối quan hệ để bảng tham chiếu đến bảng SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 76 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Từ dòng code thứ ta thấy tạo bảng Dòng dòng ta lấy tên mối quan hệ làm tên bảng Dịng đến dịng ta lấy trung bình hồnh độ tọa độ bảng để gán cho bảng từ dòng 11 đến dịng 30 duyệt hết khóa startentity add vào bảng Và từ dòng 31 đến 41 ta lấy khóa endEntity thêm vào cho bảng Như trường hợp khác dòng 44 đến dòng 57 lấy relationship bên CDM chuyển qua PDM dòng 58 đến dòng 64 ta tạo relatinoship để thêm vào bảng Tới ta hoàn tất việc cài đặt giải thuật chuyển từ CDM đến PDM Giải thuật cài đặt phương thức static Document convert(Document cdm) gói com.luong.util.Cdmtopdm 3.4.2 Giải thuật chuyển từ PDM sang Mysql SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 77 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Begin Begin List ds_khoa = KhoaChinh(table[i]); List ds_khoa = KhoaChinh(table[i]); Gán chuỗi chuoi_create = “ ”; ”; Gán chuỗi chuoi_create = “ Gán chuỗi chuoi_alter = “ ”; ”; Gán chuỗi chuoi_alter = “ Lấy phần tửtử root Document; Lấy phần root Document; Gán chuỗi fktable = “ ”; ”; Gán chuỗi fktable = “ Từ phần tửtử root duyệt qua Element có code Từ phần root duyệt qua Element có code “table” lưu vào listTable; “table” lưu vào listTable; False ds_khoa.size() > int i =0=0 ; int i ; True Add vào chuoi_create +=+= “primary key( ”; Add vào chuoi_create “primary key( ”; i < listTable.getLength(); int m m 0; 0; int = = False Gán table = tên table[i]; Gán table = tên table[i]; True Add vào chuỗi chuoi_create +=+= talbe; Add vào chuỗi chuoi_create talbe; False chuoi_create +=+={“”; ”; chuoi_create “ { m < ds_khoa.size()-1 duyệt qua Element cócó code “Column” lưu vào duyệt qua Element code “Column” lưu vào listColumn;; listColumn;; int j =j 0; 0; int = chuoi_create +=+= “ds_khoa.get[m]”; chuoi_create “ds_khoa.get[m]”; True chuoi_create +=+= “, ”; chuoi_create “, ”; chuoi_create +=+= chuoi_create j < listColumn.getLength(); False “ds_khoa.get[ds_khoa.size()-1]”; “ds_khoa.get[ds_khoa.size()-1]”; chuoi_create +=+= “)”; chuoi_create “)”; True Tại column[j] Gán column = tên column[j]; Tại column[j] Gán column = tên column[j]; Add vào chuoi_create tên column, type column, length; Add vào chuoi_create tên column, type column, length; tạitại Column[j] lấy giá trị fktable gán vào fktable; Column[j] lấy giá trị fktable gán vào fktable; Xuất chuỗi chuoi_create += “ } ”; chuoi_create += chuoi_alter; False fktable = -1; A True SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 78 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ chuoi_atler +=+=Alter table ”; ”; chuoi_atler “ “ Alter table chuoi_alter +=+= table2[k].code; chuoi_alter table2[k].code; A fktable +=+= fktable “*”; fktable fktable + + “*”; chuoi_alter +=+=add constraint”; chuoi_alter “ “ add constraint”; Từ phần tửtử root duyệt qua Element có Từ phần root duyệt qua Element có code là “table” gán vào listTable1; code “table” gán vào listTable1; List ds_khoa1 = Khoa_Chinh(table2[k]); List ds_khoa1 = Khoa_Chinh(table2[k]); g = 0; 0; g= int k=0; int k=0; g < ds_khoa1.size()-1 k < listTable1.getLength(); False chuoi_alter +=+= “ds_khoa1.get[g].code”; chuoi_alter “ds_khoa1.get[g].code”; chuoi_create +=+= “, ”; chuoi_create “, ”; code.table2[k] == fktable; chuoi_alter +=+= chuoi_alter “ds_khoa1.get[ds.khoa1.size()-1].code”; “ds_khoa1.get[ds.khoa1.size()-1].code”; Từ phần tửtử table2[i] duyệt qua node có Từ phần table2[i] duyệt qua node có True name relationship vàvà lưu vào listRelation; name relationship lưu vào listRelation; chuoi_alter +=+=)“”);” ; chuoi_alter “ chuoi_alter +=+=references ”; ”; chuoi_alter “ “ references int n=0; int n=0; chuoi_alter +=+= table2[k].code; chuoi_alter table2[k].code; chuoi_alter +=+=(“”; ”; chuoi_alter “ ( n < listRelation.getLength(); False g < ds_khoa1.size()-1 True chuoi_alter += chuoi_alter +=+= “ds_khoa1.get[g].code”; “ds_khoa1.get[g].code”; chuoi_alter chuoi_alter += “ds_khoa1.get[ds.khoa1.size()-1].code”; “ds_khoa1.get[ds.khoa1.size()-1].code”; chuoi_create +=+= “, ”; chuoi_create “, ”; chuoi_alter +=+=)“”; ”; chuoi_alter “ ) relation = listRelation[n]; relation = listRelation[n]; chuoi_alter +=+= “on delete restrict on chuoi_alter “on delete restrict on update restrict ”; ”; update restrict relation.starttable == table2[k].id; False SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 79 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Phương thức coverMysql có đối số đầu vào Document, đầu chuỗi StringBuffer Trong phương thức ta thường xuyên xử lý cộng dồn vào chuỗi chuối Do để thuận tiện tăng tốc độ chương trình đồng thời giảm bớt tài nguyên sử dụng thay ta dùng tốn tử cộng(+) bình thường ta dùng phương thức append chuỗi vào chuỗi kiểu StringBuffer Bắt đầu giải thuật tạo ba chuỗi: chuoi_create, chuoi_alter, fktable Chuỗi chuoi_create dùng để lưu trữ đoạn lệnh tạo table, tạo column, tạo khóa cho bảng Chuỗi chuoi_alter dùng để lưu trữ đoạn lệnh tạo mối ràng buộc bảng, khóa ngoại mối quan hệ chúng Chuỗi fktble dùng để đánh dấu xác định khóa ngoại tham chiếu tới table tồn hay chưa Nếu chưa tồn tiến hành tạo mối quan hệ table hành với bảng nằm fktable column Nếu tồn fktable chuỗi fktable bỏ qua chuyển sang column khác tiếp tục hết column, hết table Kế đến ta lấy phần tử root document, sau ta duyệt qua tất nút phần tử root phương thức getElementsByTagName() với name table lưu vào listTable: Element root = PDM.getDocumentElement(); NodeList listTable = root.getElementsByTagName("table"); Sau ta dùng vịng lặp duyệt hết phần tử listTable, table thứ i gán vào element table Tại table thứ i ta add vào chuoi_create phương thức append chuỗi “create table ”, tiếp tên bảng ta dùng phương thức getAttributeNode() để lây lên code table, sau mở dấu ngoặc nhọn “{”: chuoi_create.append("create table "); chuoi_create.append(table.getAttributeNode("code").toString()); Chúng ta duyệt qua tất column table thứ i gán vào listColumn, column thứ i ta gán vào element column Mỗi column lấy lên tên column, kiểu liệu column, độ dài kiểu liệu Và ta xét tới giá trị cnull, cnull = ta append vào chuoi_create “ not null” Sau hoàn tất column ta append vào chuoi_create dấy phẩy(,) if("0".equals(column.getAttribute("cnull"))) { tt.append(" not null"); } tt.append(","); SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 80 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ Tại column ta có giá trị chuỗi fktable, mặc định column khóa ngoại table fktable = “-1” Như nói phần chuỗi fktable dùng để xác định xem quan hệ tạo có tồn chưa Vì ta column có fktable khác “-1” ta cộng dồn vào chuỗi fktable giá trị fktable Ta dùng phương thức indexOf() để kiếm tra xem giá trị cộng vào có chưa, chưa cộng vào chuỗi fktable tạo mối quan hệ bảng append vào chuoi_alter, ngược lại chuyển qua column if(column.getAttribute("fktable").equals("-1")) { // không làm } else { int index = fktable.indexOf(column.getAttribute("fktable")); if(index == -1) { fktable = fktable + column.getAttribute("fktable") + "*"; // thực tạo mối quan hệ append vào chuoi_alter } } Khi xét fktable duyệt lại lần table phương thức getElenentsByTagName() Tại table thứ k ta gán vào element table2 Ta xét table2 có giá trị id với giá trị fktable ta dừng lại xét table2 Từ node table2 ta lấy element có tên relationship Tại relationship thứ n, gán vào element relation Ta xét ralation giá trị starttable với id table xét (element table) Ta thực append vào chuoi_alter chuỗi “Alter table ”, lấy code talbe, thực tạo mối quan hệ gán tiếp vào chuỗi create_alter Việc tạo mối quan hệ thực đoạn mã sau: if(relation.getAttribute("starttable").equals(table.getAttribute("id" ))) { alter.append("\n"); alter.append("alter table "); alter.append(table.getAttribute("code")); alter.append(" add constraint "); alter.append(relation.getAttribute("name")); alter.append(" foreign key "); alter.append(" ("); List key1 = new ArrayList (); SVTH: Đinh Hoàng Lương MSSV: 1081578 Lê Trần Phúc MSSV: 1081593 Page 81 LVTN: Công Cụ Thiết Kế CSDL Online GVHD: Ts.TRẦN CAO ĐỆ key1 = getKey(table2); for(int g=0; g

Ngày đăng: 23/10/2014, 07:31

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan