Database Quản lý phòng khám thú y

Em chào m.n ạ. Em đang có 1 số vấn đề mong được mọi người hỗ trợ. Hiện tại em đang thiết kế cơ sở dữ liệu cho phần mềm quản lý khám chữa bệnh tại phòng khám thú y. Nhưng em đang gặp khó khăn trong lúc thiết kế. cụ thể như sau ạ.
Issue 1: Cụ thể thì em đang có issue giữa 3 table là: prescription (đơn thuốc), invoice_service (hóa đơn sử dụng dịch vụ) và medical_examination (phiếu khám).

    • 1 phiếu khám có thể có 1 đơn thuốc, 1 đơn sử dụng dịch vụ
    • 1 đơn thuốc tạo ra chắc chắn phải thuộc 1 phiếu khám
    • 1 hóa đơn dịch vụ tạo ra chắc chắn phải thuộc 1 phiếu khám

Issue 2: Em mong muốn in ra 1 hóa đơn sẽ liệt kê cả đơn thuốc và các dịch vụ đã sử dụng

Đây là cơ sở dữ liệu em phác thảo ra ạ.

1 Like

Khi dùng từ “Thiết kế” là phải có hình minh hoạ/ bản vẽ. Đàng này trình bày rối nùi, câu cú lại cứ dính chùm như thế ai mà hiểu bạn muốn cái gì.

Chụp hình các table và mối quan hệ lên đây để người khác xem và phụ giúp. Nếu chưa có thì dùng công cụ này https://dbdiagram.io/home rồi gửi link để anh em xem mà hỗ trợ.

Nếu vẫn cứ theo cách hiện tại: bạn khó nhận được ai chú ý quan tâm trợ giúp.

5 Likes

nhìn chung, việc thì việc thiết kế db thì chỉ có vài vấn đề cơ bản

  1. xác định/phân tích rõ businesss
  2. xác định các thực thể, hiển nhiên là thuộc tính của các thực thể đó nữa
  3. xác định quan hệ giữa các thực thể

tất cả đều từ business mà ra cả thôi, bạn cần làm tốt bước 1 trước rồi mới tính tới chuyện thiết kết

7 Likes

Em đã bổ sung link database ạ. Anh góp ý và hỗ trợ em với ạ. Em cảm ơn ạ

1 Like

Thiết kế sai rồi:

  • 1 phiếu khám có thể có 1 đơn thuốc, 1 đơn sử dụng dịch vụ
    “1 đơn sử dụng dịch vụ” là sao.
    Lập phiếu khám như thế nào? Giả sử mèo tới vừa khám răng(dịch vụ khám răng), vừa khám triệt sảng(dịch dụ triển sản) thì có mấy phiếu khám?
1 Like

Không ạ. Em coi bài toán khám này là khám chung. Khi đến khám bác sĩ có thể dựa vào triệu chứng bệnh mà bệnh nhanh cung cấp để chỉ định các dịch vụ sẽ phải làm. Em ko chia cụ thể là khám răng hay gì ạ!

Vậy tự biên tự diễn ah :v

Từ dịch vụ có vẻ em dùng hơi confuse 1 chút. Từ dịch vụ e đang dùng ví dụ là: Nội soi, xét nghiệm,…

Còn nếu như anh có góp ý ở trên thì em đang hiểu nó phân rõ ra mình muốn khám gì. Nhưng theo em thì trong phòng khám thú y nó khác của con người. 1 bác sĩ thú y sẽ có thể khám bất cứ vấn đề gì. Khác con người mình là cần khám chỉ định chuyên khoa: răng hàm mặt, nội tiết,…

Rất tốt, mình thì không rành về CSDL, cũng tự học và ở mức ABC thôi, nhưng mình có cách tiếp cận để giải bài của bạn, và chia sẻ nó với bạn như này để bạn dễ làm nè.

Bạn tự điều chỉnh trên sơ đồ thiết kế của bạn, mình chỉ diễn giải trong thực tế phòng khám để bạn hình dung thay vì lý luận một lát dẫn đến rối beng. Tại sao là rối beng? Ví dụ như này: trong thực tế bạn có đi khám thì bạn mới biết rằng toa thuốc và hoá đơn, trong toa thuốc thì chỉ có tên thuốc, trong hoá đơn có cả giá tiền. Nhưng có phải đơn giản vậy không? Nhiều lúc hoá đơn lại là tên loại thuốc thay thế chứ tên thuốc không hoàn toàn giống như trong toa.

Cũng có thể làm các table trung gian chứa các kết quả query. Hoặc nó chỉ là trong lập trình đó là tuỳ bạn có đứng luôn về lập trình hay chỉ làm CSDL.

1 hoá đơn sẽ gồm có các thông tin khi in ra (còn lưu dữ liệu sẽ nhiều hơn hoặc ít hơn, khi in thì kết xuất từ nhiều table khác nhau nhé, đừng nhầm lẫn in hoá đơn chính là table hoá đơn). Các mục:

  1. Hoá đơn số/ số hoá đơn - đây là mã để phân biệt các hoá đơn, có thể là số thứ tự hoặc kết hợp sao đó để mỗi hoá đơn là duy nhất
  2. Ngày tháng hoá đơn (có thể chính xác giờ, phút)
  3. Tên người Nhân viên xuất hoá đơn
  4. Tên Người thanh toán/ khách hàng/ tên bệnh nhân (ở đây là con chó/ mèo)
  5. Tiêu đề hoá đơn, có thể là “Hoá đơn dịch vụ thú y Hoa Đà” hoặc… tự đặt theo danh mục qui định cho trước.
  6. Các dòng liệt kê tính tiền: mỗi dòng có thể là một dịch vụ/ tên thuốc. Có thể khi liệt kê chia làm các phần khác nhau để dễ đọc hơn.
    Ví dụ:
    Dịch vụ
  • Bấm móng chân mèo - 25K;
  • Khám bụng sóc - 60K

Thuốc/ sản phẩm bổ trợ

  • Thuốc chữa rụng lông chó - 80K;
  • Dung dịch vệ sinh vết thương mèo - 40K;
  1. Tổng số tiền phải thanh toán (đơn giản là phép cộng mấy cái dòng kia)

Như vậy, khi nhìn qua ta sẽ thấy table Hoá đơn thực ra chỉ có khoá chính là ngày giờ là thuộc về chính nó, còn lại thì nó toàn là trường từ các table khác. Bạn muốn có những thông tin gì thì cứ liệt kê vào.

Các nghiệp vụ khác bạn cũng làm tương tự như phân tích 1 hoá đơn ở trên, nói chung là lấy tờ giấy ngồi liệt kê ra, quan sát, suy nghĩ xem nên đặt dữ liệu ở table nào.

Nên gom hết giấy tờ của 1 phòng khám thú y hoặc bỏ công phỏng vấn 1 chủ phòng khám thú y để liệt kê ra những cái gì đang xảy ra. Viết nó ra từng tờ giấy và đặt lên trên bàn như phơi sách vậy để dễ hình dung chuyện gì xảy ra từ lúc 1 người mang một con chó/ con mèo tới phòng khám -> gặp cô tiếp tân, cô ấy sẽ nhập gì vào máy. Rồi khi chẩn đoán, kê toa hoặc thực hiện thao tác thú y như phẫu thuật, khâu vá hay bó bột gì đó thì thông tin này sẽ thế nào.

Rồi sau đó, khi người ta khám cho con vật thì làm gì tiếp, có nhập thông tin gì tiếp theo? Ví dụ bác sĩ kê đơn con chó này cần mua 5 liều thuốc, thì nhập những thông tin gì, nếu khám tổng quát thì ghi gì, khám bụng ghi gì, khám chân ghi gì?

Tiếp tục nữa là nếu con chó mèo đó có lịch hẹn tái khám thì có quản lý cái này không? Từ những cái này ta mới rã về dữ liệu, chia về các column trong các table, sau khi dời qua chuyển lại chán chê, phân tích rõ để quyết định khoá chính, khoá ngoại, kiểu loại dữ liệu.

Không phải tất tần tật cái gì cũng quản lý, mà tuỳ qui mô để ta nên làm cái gì, ôm đồm quá nó phình to lắm.

Ngày trước mình làm BA là làm mấy cái trên sau đó mang về rồi mới mô tả là bằng sơ đồ rồi mới đưa cho mấy bạn lập trình, và họ phân công người thiết kế cơ sở dữ liệu rồi có buổi họ ngồi mô tả lại xem họ và mình có hiểu giống nhau về một nghiệp vụ hay không. Nói chung là “lập trình trên giấy, trên bảng” chán chê mải mê rồi mới đưa vào máy tính để biến nó thành CSDL, thành code.

Từ đó bạn sẽ ôn lại kiến thức CSDL là quan hệ 1-1 hay nhiều - 1 hay nhiều - nhiều. Và cũng xác định xem bạn định thiết kết đạt chuẩn 1NF, 2NF, 3NF, chuẩn BC hay chuẩn gì đó mà điều chỉnh bởi vì không có mẫu số chung cho thiết kế. Có người chú trọng hiệu suất nên họ chấp nhận dữ liệu có sự dư thừa/ trùng lắp phần nào, có người lại kiên quyết thiết kế phải đạt chuẩn.

Quay lại chuyện là một con thú tới khám khác với con người như bạn nói, nghĩa là một bác sĩ thú y có thể khám răng, khám chân, khám bụng. Vậy thì thông tin mà họ ghi lại là như thế nào? Và bạn sẽ làm rõ là cần cất vào một/ nhiều table ra làm sao, chia làm mấy cột (giả sử để sau này có thể lọc thông tin nhằm khám phá xem chó hay bị bệnh nào, mèo bị bệnh nào nhiều nhất…)

4 Likes


Nhìn vào đây sao e biết được con pet nó đang dùng dịch vụ khám gi?
Như dưới mới đúng:

Ngồi tự nghĩ business tự vẻ, rối là phải.
Tương tự, tự suy nghĩ cho hoá đơn cho dịch vụ, và hoá đơn thuốc, 2 cái này độc lập.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?