Làm thế nào để cấu trúc một mô hình để biểu diễn đúng và hiệu quả dữ liệu giống như cây trên cơ sở dữ liệu quan hệ?


13

Dựa trên việc truyền dữ liệu giống như cây trong cơ sở dữ liệu quan hệ bằng câu hỏi SQL , tôi muốn biết cách thường xuyên sử dụng để mô tả dữ liệu giống như cây trên cơ sở dữ liệu quan hệ xem xét ý nghĩa vật lý?

Tôi giả định rằng RDBMS không có các tính năng đặc biệt để xử lý các tính năng khác ngoài SQL ANSI thông thường hoặc các tính năng khả dụng phổ biến.

Tôi luôn quan tâm đến MySQL và PostgreSQL và cuối cùng là SQLite.

Câu trả lời:


8

Tôi tin rằng anh ấy sẽ cho một cái gì đó giống như một cây nhị phân. Tôi sẽ chỉ bao gồm ba khóa được gắn với id duy nhất của cùng một bảng, một cho bên trái, một cho bên phải và một cho phụ huynh.

tức là- (rất nhiều mã giả)

TABLE tree
int         id                  autoinc
varchar(16) data_you_care_about
int         parent_id
int         left_child_id
int         right_child_id

FOREIGN KEY parent_id = tree.id
FOREIGN KEY left_child_id = tree.id
FOREIGN KEY right_child_id = tree.id

Một xem xét cho một mục được liên kết đôi là bất kỳ thay đổi nào về vị trí cây trong lược đồ này sẽ dẫn đến không ít hơn 3 bản cập nhật thay vì một bản cập nhật. Như bạn nói, đây cũng là một giả định lớn rằng cây nhị phân tiến / lùi là những gì được yêu cầu.
REW

rất đúng, theo kinh nghiệm của tôi, tôi thích thuế cập nhật của danh sách liên kết đôi với danh sách liên kết đơn vì tôi thường phải duyệt qua một cái cây. nhưng trong nhiều trường hợp, điều này là không cần thiết
Patrick

Nó chắc chắn phụ thuộc vào mô hình cơ bản. Tôi nghĩ rằng câu trả lời của Patrick là đủ nếu đó là mô hình phù hợp.
jcolebrand

6

Nếu mỗi nút thực sự là cùng một thực thể dữ liệu, thì mô hình vẫn sẽ biểu thị một bảng cho mỗi thực thể và một cột liên kết cho giao dịch cây trong đó mỗi nút chỉ được liên kết một lần.

Đối với các thực thể được liên kết tại nhiều điểm trong cây, một bảng liên kết riêng hoặc một cột giá trị khác biệt sẽ được sử dụng.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.