External Database Query: nhiều tables với relations 1. Nhắc lại về Database Query: Cơ sở dữ liệu là gì, xin được phép không nhắc lại. Lấy cơ sở dữ liệu từ bên ngoài (Text, Access, Fox, . ) đã được Hanhdung107 trình bày ở bài : - Công cụ Database Query Tuy nhiên bài đó mới giới thiệu phương pháp lấy dữ liệu từ 1 bảng dữ liệu của Access. Hôm nay tôi muốn giới thiệu phương pháp lấy dữ liệu từ 2 bảng hoặc 3 bảng trong Access, kèm theo nó là các mối quan hệ (relations) giữa các bảng nhằm những mục đích khác nhau. Tôi sẽ đưa 1 số thí dụ ứng dụng được trong kế toán. 2. Thuật ngữ dùng trong bài: Trường dữ liệu: (Data Field) nói nôm na là tương ứng một cột dữ liệu trong bảng tính Excel. Trường dữ liệu có thể là 1 trong các kiểu dữ liệu số, ngày, text, luận lý, . . . và trường tính toán. One to Many : Mối quan hệ 1 ~ nhiều One to One: Mối quan hệ 1 ~ 1 3. Sơ lược về mối quan hệ: 3.1 Mối quan hệ One to Many: Trong cơ sở dữ liệu hiện đại, các nhà viết phần mềm hiện nay thường áp dụng cấu trúc dữ liệu kiểu Master - Child theo ngôn ngữ Access, hoặc Parent - Child theo ngôn ngữ Fox, hoặc master - Detail theo ngôn ngữ Oracle. Dù gọi là gì đi nữa thì đều có nghĩa là 1 khối dữ liệu được chia làm 2 phần: phần chung và phần riêng. a. Thí dụ 1: Phiếu nhập kho, xuất kho Phần chung gồm những thông tin chung cho 1 tờ phiếu như: Số chứng từ, ngày chứng từ, Nội dung chính (diễn giải), đối tượng nhận. Phần riêng gồm các mục mã hàng, số lượng, đơn giá, thành tiền. Ta có thể thấy ngay rằng 1 phiếu nhập hoặc 1 phiếu xuất sẽ có nhiều dòng ứng với nhiều mặt hàng. Nếu ta tạo được mối liên kết giữa số phiếu và các dòng dữ liệu trong phiếu đó thì giữa 1 rừng dữ liệu ta có thể lọc ra các dòng nào của phiếu nhập, xuất nào. Ở đây ta chọn số chứng từ làm cơ sở cho sự liên kết. Muốn vậy trong phần riêng ta tạo thêm 1 trường cũng là số chứng từ. Mối quan hệ giữa 2 phần ở trên là mối quan hệ One to Many : 1 phiếu nhập / xuất tương ứng nhiều mặt hàng nhập xuất. b. Thí dụ 2: Phiếu thu tiền Phần chung gồm số phiếu, ngày phiếu, đối tượng thu, diễn giải Phần riêng gồm các dòng dữ liệu liên quan đến từng món nợ như liệt kê các khoản thu tương ứng với từng món (thí dụ như thu tiền 3 tờ hoá đơn): số hoá đơn, số tiền của tờ hoá đơn đó, số hợp đồng mua bán nếu có. 3.2 Mối quan hệ One to One là mối quan hệ 1 ~ 1 như thí dụ sau: a. Thí dụ 1: Danh sách đối tượng và danh sách liên quan Giả sử ta có 1 danh sách khách hàng gồm các trường: mã KH, tên KH, mã số thuế, địa chỉ Và ta lại có 1 danh sách tồn nợ đầu kỳ của một số KH trong số đó, gồm mã KH, số tiền dư nợ, số tiền dư có. Ta muốn thiết lập 1 mối quan hệ để từ DS 1 ta biết được đối tượng KH đó nợ bao nhiêu trong ADS 2. Vậy ta tạo mối quan hệ giữa trường mã KH của bảng 1 và mã KH của bảng 2. Chú ý: Là giải thích thì như vậy nhưng khi thực hành, các bạn nên đặt tên trường khác nhau cho cùng 1 loại dữ liệu ở 2 hoặc 3 bảng. Thí dụ MaKH và Ma_KH, SoCT và So_CT . . . 3.3 Mối quan hệ đa phương: (tay ba, tay tư . . .) Từ các thí dụ trên ta có thể mường tượng các mối quan hệ đa phương: - 1 phiếu xuất kho liên quan đến nhiều mặt hàng và - 1 mặt hàng liên quan đến nhiều lần nhập xuất - 1 khách hàng liên quan đến nhiều lần mua hàng và nhiều lần thanh toán - 1 Tài khoản quỹ liên quan đến nhiều phiếu thu chi. và liên quan đến các tài khoản khác trong Danh mục tài khoản. - 1 Dữ liệu gốc liên quan đến DS mặt hàng, DS khách hàng, DS nhà cung cấp, DS Tài khoản KT, Danh mục ngoại tệ . . . Các mối quan hệ thể hiện trong Access như sau: . External Database Query: nhiều tables với relations 1. Nhắc lại về Database Query: Cơ sở dữ liệu là gì, xin được phép không nhắc lại quan đến nhiều mặt hàng và - 1 mặt hàng liên quan đến nhiều lần nhập xuất - 1 khách hàng liên quan đến nhiều lần mua hàng và nhiều lần thanh toán - 1 Tài khoản quỹ liên quan đến nhiều phiếu. lượng, đơn giá, thành tiền. Ta có thể thấy ngay rằng 1 phiếu nhập hoặc 1 phiếu xuất sẽ có nhiều dòng ứng với nhiều mặt hàng. Nếu ta tạo được mối liên kết giữa số phiếu và các dòng dữ liệu trong