2008-11-27 16 views
7

Tôi đã tìm thấy một vài bài báo trực tuyến cung cấp các ví dụ về cách mô hình hóa các đồ thị các loại (đặc biệt là DAG) trong SQL, nhưng tất cả chúng đều có vẻ phức tạp, do sự đơn giản tương đối của những gì chúng đang làm mẫu.Làm thế nào để mô hình hóa một mạng Bayesian, hay nói chung, một đồ thị có trọng số trực tiếp, trong SQL?

Có cách nào tốt nhất/tiêu chuẩn để thực hiện việc này không? Suy nghĩ hiện tại của tôi là một cái gì đó như thế này:

create table node (
    id int not null auto_increment, 
    name TEXT 
) 

create table edge (
    from_node int not null, 
    to_node int not null, 
    weight float 
) 

Có điều gì sai trái với điều đó không? Có ai biết cách tốt hơn (mạnh mẽ hơn, có lẽ)?

Trả lời

8

Đây sẽ là một cách tiếp cận khá hợp lý. SQL không thực sự làm cấu trúc đệ quy tốt, mặc dù một số hệ thống như Oracle hoặc SQL Server có một hàm truy vấn đệ quy.

Mặc dù bạn có thể tìm thấy cấu trúc hoạt động tốt hơn cho các loại tìm kiếm cụ thể nhưng tôi không nghĩ rằng bạn sẽ tìm thấy cấu trúc tốt hơn đáng kể trong trường hợp chung. Nếu yêu cầu của ứng dụng của bạn bị giới hạn theo cách này, việc tối ưu hóa như vậy có thể mang lại cho bạn lợi ích.

Là một mạng Bayesian là Directed Acyclic Graph (DAG), một mối quan hệ cha mẹ và con hoàn toàn đệ quy không đủ để mô hình mạng (tức là một nút có thể có nhiều hơn một phụ huynh), vì vậy mối quan hệ M: M bạn đã mô tả là cần thiết.

Các sách 'SQL cho Smarties' khác nhau theo Joe Celko cung cấp tổng quan về các kỹ thuật để triển khai và truy vấn cấu trúc phân cấp và đồ thị trong SQL. Đây là nguồn tài nguyên tốt nhất cho chủ đề mà tôi biết. Rất khuyến khích.