Tôi có bảng cơ sở dữ liệu sau đây với thông tin về con người, bệnh tật, và các loại thuốc:Làm cách nào để dịch một câu lệnh boolean đơn giản sang SQL?
PERSON_T DISEASE_T DRUG_T
========= ========== ========
PERSON_ID DISEASE_ID DRUG_ID
GENDER PERSON_ID PERSON_ID
NAME DISEASE_START_DATE DRUG_START_DATE
DISEASE_END_DATE DRUG_END_DATE
Từ các bảng, tôi chạy một số thống kê về những cá nhân đã có thuốc và đã có bệnh. Từ điều này tôi có thể tìm ra những mẫu nào thú vị cho tôi để nghiên cứu kỹ hơn. Ví dụ, dưới đây là một ví dụ đơn giản của mô hình boolean Tôi có thể tìm thấy cho bệnh 52:
((Drug 234 = false AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true))
Edit: Dưới đây là một ví dụ:
((Drug 234 = true AND Drug 474 = true AND Drug 26 = false) OR
(Drug 395 = false AND Drug 791 = false AND Drug 371 = true))
Bây giờ tôi muốn chuyển đổi mô hình này vào một truy vấn sql và tìm tất cả những người phù hợp với mô hình này.
Ví dụ: tôi muốn tìm tất cả những người trong PERSON_T đã mắc bệnh và ((người không dùng thuốc 234 và 26 trước khi biểu hiện triệu chứng nhưng đã dùng thuốc 474 trước khi có triệu chứng) hoặc (người đã uống thuốc) 371 trước khi trưng bày các triệu chứng, nhưng không phải thuốc 791 và 395 trước khi biểu hiện triệu chứng))
Làm cách nào để chuyển mẫu này trở lại truy vấn gốc?
Đây là nỗ lực đầu tiên của tôi, nhưng tôi gặp khó khăn về thời hạn đầu tiên:
SELECT * FROM PERSON_T, DRUG_T, DISEASE_T
WHERE DISEASE_ID = 52 AND
PERSON_T.PERSON_ID = DISEASE_T.PERSON_ID AND
PERSON_T.PERSON_ID = DRUG_T.PERSON_ID AND
(DRUG_T.DRUG_ID=234 AND (DRUG_T.DRUG_START_DATE>DISEASE_T.END_DATE || ???)
tôi cần điều này để làm việc trong PostgreSQL, nhưng tôi cho rằng bất kỳ câu trả lời nhất định có thể được dịch từ một cơ sở dữ liệu cho PostgreSQL.
Response to comments
- Tôi cố định định dạng của cơ sở dữ liệu bảng. Cảm ơn bạn.
- Tôi cần có thể lấy một câu lệnh boolean tùy ý và dịch nó sang SQL. Các câu lệnh boolean mà chúng ta đang tạo ra dài hơn nhiều so với ví dụ mà tôi đã đưa ra. Bất kỳ bảng mới nào tôi tạo sẽ nằm trong cơ sở dữ liệu mới và cần phải có cùng một lược đồ như các bảng gốc. Bằng cách này cho người dùng cuối, họ có thể chạy cùng mã của họ trên các bảng mới và nó hoạt động giống như khi nó chạy trên các bảng gốc. Đây là yêu cầu của khách hàng. Tôi hy vọng tôi có thể tạo ra một cái nhìn mà chỉ là một truy vấn đến các bảng ban đầu. Nếu chúng ta không thể làm điều đó để làm việc, tôi có thể tạo một bản sao của các bảng và lọc dữ liệu khi tôi sao chép nó sang bảng mới. Chúng tôi không sử dụng mạng thần kinh để thực hiện phân tích. Chúng tôi đang sử dụng các thuật toán tùy chỉnh của chúng tôi có quy mô tốt hơn nhiều so với mạng thần kinh.
- The Disease_Start_Date là ngày mà người đó nhận được sự phân biệt có khả năng khi các sympton bắt đầu xuất hiện. Bệnh_End_Date là khi người đó được hồi phục, có khả năng là khi các triệu chứng biến mất.
- Drug_start_date là khi người đó bắt đầu uống thuốc. Drug_end_date là khi người đó ngừng dùng thuốc.
Chỉnh sửa Tôi đã thêm câu trả lời của riêng mình. Bất cứ ai có thể đưa ra một câu trả lời đơn giản hơn?
Tôi nghĩ defs bảng của bạn được định dạng sai. DISEASE_END_DATE có nên ở trong bảng Person hoặc bảng Bệnh không? Tôi nghĩ rằng khoảng cách sai lầm. Ngoài ra, do đó, DRUG_END_DATE xuất hiện trong bảng Bệnh. – MJB
Bạn chỉ quan tâm đến sự kết hợp đặc biệt của các loại thuốc đó hoặc sẽ có những loại thuốc khác?Nếu có nhiều kết hợp thay vì thực hiện truy vấn SQL tĩnh này, tôi khuyên bạn nên tạo 1-2 bảng khác chứa các mẫu thuốc mà bạn đang tìm kiếm và tạo truy vấn SQL động để tham chiếu bảng ràng buộc của bạn. Điều này sẽ mở rộng tốt hơn với các yêu cầu trong tương lai của bạn và sẽ giúp bạn tiết kiệm thời gian thực hiện các truy vấn khác nhau mỗi khi bạn thay đổi "loại thuốc quan tâm". Loại phân tích này cũng hét lên "mạng thần kinh" với tôi - tìm ra một mô hình phi tuyến tính giữa dữ liệu hỗn loạn. –
Không có đề cập đến các triệu chứng trong bất kỳ bảng nào. Chúng ta có thể giả định rằng các bảng chỉ ghi lại dữ liệu trước khi các triệu chứng được trưng bày? Các triệu chứng có được ghi nhận là các bệnh riêng biệt trên bảng bệnh không? Hoặc là các triệu chứng không liên quan đến truy vấn được đề cập? –