Tôi viết chủ đề này với mục đích giúp đỡ các bạn mới bắt đầu học Access có thể tiếp cận với Access..
Chủ đề không được viết và sắp xếp theo cấu trúc bất cứ sách vở hoặc bài giảng nào mà là dựa trên nỗ lực tự học, đọc và làm bài tập của một bạn (hiện là thành viên mới của diễn đàn - Đặng Kim Ngọc).
Trên cơ sở các ý kiến ban đầu, Ngọc đã đọc một số tài liệu trên mạng và thực hành với bài tập đầu tiên về CSDL. Sau đây là bài tập mà Ngọc đã thực hiện trong ngày hôm nay với câu hỏi sau
Trích dẫn:Với những cái em đã đọc và em đã làm 1 ví dụ này. Em làm ví dụ về quản lý hàng hóa. Em đã tạo các bảng (như file đính kèm). Em đã đặt các khóa. Em đã làm đến bước tạo Relationships thì chưa được.
Trong ví dụ này, anh xem em:
- Em đã tạo các khóa như vậy đã được chưa?
- Em tạo các bảng với nội dung như vậy có hợp lý không để truy vấn dữ liệu và sau này còn tạo Form?
- Em tạo quan hệ Relationships cho PHIEUNHAPKHO thì được. Nhưng đến PHIEUXUATKHO, sao em không tạo được MADOITUONG có quan hệ 1 với nhiều?
Đó là những gì em đã đọc được và làm ví dụ áp dụng. Anh xem qua cho em và hướng dẫn em thêm nhé!
Cám ơn anh Ngọc nhiều!
Em Ngọc
------------------------------------------------
^^ Chập chững đi....
Liên kết đến CSDL ở đây
Với câu hỏi của Ngọc, tôi xin phép trả lời bằng bài tập phân tích
Góp ý thứ nhất....Luôn giữ cho CSDL gọn gàng và nhỏ
Với người mới học, thao tác thường hay quên và ít chú ý nhất đó là Làm gọn file Access của mình. Đây là việc làm cho các phần thừa, các bản ghi/ bảng ..vv đã bị xóa mất hẳn khỏi CSDL. Làm như vậy, kích thước file sẽ nhỏ đi rất nhiều (chẳng hạn file của bạn Ngọc hiện tại là 2.2M, sau khi nén lại chỉ còn 544K)
Cách làm như sau: Nhấn vào File/ chọn Compact and Repair Database.
Hoặc có thể làm một cách tự động mỗi khi thoát khỏi Database bằng cách
Nhấn File/Option/Current Database/ Chọn Compact on Close...
Góp ý thứ 2 - Nên tận dụng các chức năng của Access trong việc kiểm soát khóa chính...
Thông thường, tôi không dùng (đây là
trường phái mà tôi hay dùng - có nhiều bạn khác dùng cách khác...) các trường khóa là trường dạng Text mà dùng dạng Auto Number (đánh số tự động). Cách làm đó có cái lợi:
+ Access sẽ tự động kiểm soát số thứ tự đánh số mà tôi không phải quan tâm đến việc có trùng hay không trùng;
+ Ít gặp lỗi trong quá trình xử lý số liệu.
Với tình huống CSDL hiện tại của Ngọc, tôi sẽ thêm một trường ID_Doituong với bảng DMDOITUONG, ID_PhieuNhapKho, ID_HangHoa, ID_Kho với kiểu là AutoNumber và đặt khóa liên kết bảng với các trường này.
Như vậy tại các bảng có liên kết tôi sẽ bổ sung thêm các trường như trên. Chẳng hạn
Bảng CTPHIEUNHAP tôi bổ sung trường ID_Doituong với kiểu Number và đặt liên kết Nhiều - Một với trường ID_Doituong trong bảng DMDOITUONG
Tất nhiên việc này nhiều bạn sẽ không thích thú vì nó làm phát sính thêm một việc đó là thêm một trường Mã theo chuẩn mực mong muốn của nghiệp vụ.
Góp ý thứ 3 - Khi xây dựng quan hệ, cần phát sinh từ phân tích nghiệp vụ.
Với trường hợp CSDL hiện tại, có các cặp quan hệ sau:
+ Phiếu nhập phát sinh theo đối tượng (vì đó là chủ thể) - Vậy quan hệ này sẽ là quan hệ Một (Đối tượng) - Nhiều (Phiếu nhập). Khi xóa đối tượng, tất cả các phiếu nhập sẽ được xóa theo.
Như vậy quan hệ 2 trường liên kết sẽ đòi hỏi Enforce Referential Integrity (Bắt buộc phải tham chiếu nhất quán), Cascade Update/Delete related records (Tự động cập nhập, xóa bản ghi liên quan). Xin phép gọi là liên kết chặt
+ Hàng hóa phát sinh theo kho nhưng có thể một hàng hóa có thể xuất hiện ở nhiều kho do vậy nếu thiết lập liên kết như hiện tại (1 kho, nhiều hàng hóa, liên kết chặt), bạn sẽ không thể sử dụng được 1 danh mục hàng hóa chung được vì mỗi mã hàng đó được tạo ra là đuy nhất cho kho đó mất rồi.
Nếu muốn sử dụng một danh mục hàng hóa để tiện việc nhập liệu, bạn có thể tạo ra một bảng DMHANGHOACHUNG bao gồm ID_HANGHOACHUNG, MAHANGHOA, TENHANG ... và các trường khác cần quản lý liên quan đến danh mục hàng hóa. Sau đó tạo một liên kết tham chiếu (lỏng - hoặc chặt cũng được) giữa trường ID_HANGHOACHUNG với trường ID_HANGHOACHUNG trong bảng DMHANGHOA.
Nói khác hơn, không còn danh mục hàng hóa thì không còn hàng ở các kho trong khi nhà kho vẫn còn đó....
+ Quan hệ giữa hàng hóa và phiếu nhập có 2 dạng:
- Người ta muốn biết hàng đó ở kho nào? như thế, chỉ cần Gắn liên kết giữa ID_Hanghoa trong phiếu nhập với ID_Hanghoa trong DMHANGHOA là được.
- Người ta chỉ cần biết loại hàng, còn kho là bất kỳ: Lúc này chỉ cần gắn liên kết ID_Hanghoa trong phiếu nhập với ID_HANGHOACHUNG. Và bổ sung thêm một trường ID_Kho vào phiếu nhập và gắn liên kết lỏng (không bắt buộc cập nhập/ xóa) với ID_Kho.
Với các điều chỉnh như vậy, bảng dữ liệu đã có thay đổi như trong liên kết kèm theo. Cách làm này sẽ giúp bạn thu nhỏ kích thước CSDL và dễ thao tác hơn nhiều.
Ngoài ra, xin giới thiệu một cách để tạo ra các Combobox lựa chọn danh mục trong quá trình nhập liệu:::
>1. Vào chế độ thiết kế bảng DMHANGHOA
>2. Thêm trường ID_HANGHOACHUNG
>3. Mục Data Type chọn Lookup
>4. Chọn I want the lookup ...(Tôi muốn trường tìm kiếm lấy giá trị từ bảng/ query khác)
>5. Next, chọn DMHANGHOACHUNG
>6. Next, thêm ID_HANGHOACHUNG, MAHH, TENHH
>7. Next, Chọn tên trường cần sắp xếp
>8. Next ... và kết thúc
Gợi ý: Sau này các bạn có thể quan sát phần DataType của trường này và Tab LookUp để hiểu nguyên lý và tự thiết kế mà không cần WIZARD nhé.
Góp ý thứ 3: Đơn gia của Ngọc là kiểu Long (không có thập phân, như vậy có thể không ổn, nên chọn là Single hoặc Double (thực) để có thể thêm thập phân vì có thể ta dùng đơn vị tính hàng ngàn thì sao?
Bạn Ngọc sẽ làm tiếp phần còn lại nhé... và lưu ý post lên đây phần phân tích bài của bạn.
Liên kết bài đã sửa ở đây