Truyền dữ liệu giống như cây trong cơ sở dữ liệu quan hệ bằng SQL


16

Có cách nào để duyệt dữ liệu cây trong SQL không? Tôi biết về connect byOracle, nhưng có cách nào khác để thực hiện điều này trong các triển khai SQL khác không? Tôi đang hỏi vì sử dụng connect bydễ hơn viết một hàm lặp hoặc hàm đệ quy để chạy truy vấn cho từng kết quả.

Vì một số người dường như bị nhầm lẫn bởi cụm từ "dữ liệu cây", tôi sẽ giải thích thêm: Ý tôi là liên quan đến các bảng có trường parent_idhoặc tương tự chứa khóa chính từ một hàng khác trong cùng một bảng.

Câu hỏi xuất phát từ một kinh nghiệm khi tôi làm việc với dữ liệu được lưu trữ theo cách này trong cơ sở dữ liệu của Oracle và biết rằng điều đó connect bykhông được triển khai trong các DBMS khác. Nếu một người sử dụng SQL tiêu chuẩn, người ta sẽ phải tạo một bí danh bảng mới cho mỗi phụ huynh mà họ muốn đi lên. Điều này có thể dễ dàng ra khỏi tầm tay.


Bạn có giải pháp của Joe Celko. Vài mẫu: Cây trong SQL , Cây và phân cấp trong Oracle , mô hình tập hợp lồng nhau . Không cần thiết phải có cú pháp đường ;-).
Mary

Câu trả lời:


14

Cuốn sách của Celko là một tài nguyên tốt - đôi khi hơi quá "hàn lâm".

Tôi cũng đã thực sự tìm thấy phương pháp này , được gọi là 'bảng đóng' để hoạt động khá tốt.

Nếu bạn đang sử dụng cơ sở dữ liệu cho phép các CTE đệ quy (như PostgreQuery 8.4 trở lên hoặc SQL Server 2005 hoặc mới hơn ), thì chúng thực sự là cách tốt nhất để sử dụng. Nếu bạn đang ở trên Oracle, luôn có "kết nối" đáng kính .

Theo kinh nghiệm của tôi, việc trao một bộ bảng trong lược đồ "cây ngây thơ" là điều phổ biến hơn nhiều và phải tìm ra cách trích xuất cây chính xác từ kho lưu trữ đó, hơn là có cơ hội tạo ra trình dọn dẹp Cấu trúc "bảng đóng cửa".


9

Một CTE đệ quy sẽ là giải pháp dễ dàng nhất của bạn. SQL Server 2005 và các phiên bản hiện tại của PostgreQuery hỗ trợ CTE. Nếu bạn đang sử dụng SQL Server 2008 hoặc mới hơn, bạn có thể sử dụng HIERARCHYIDkiểu dữ liệu. Bạn có thể tìm thấy một ví dụ hay về điều này tại HVELyID: Mô hình phân cấp dữ liệu của bạn với SQL Server 2008

Tài nguyên bổ sung:



1

Phương thức SQL tiêu chuẩn là một truy vấn đệ quy của người Hồi giáo được cung cấp bởi CTE đệ quy và được chỉ định như WITH [ RECURSIVE ]trong truy vấn. Việc triển khai không được chỉ định trong thông số kỹ thuật, chỉ có các phương thức được tạo sẵn cho các cấu trúc truy vấn được đệ quy. Trong trường hợp đơn giản nhất, việc thực hiện cấu trúc dữ liệu chỉ yêu cầu ID và ID cha trên một hàng.

Ngoài ra còn có rất nhiều giải pháp dành riêng cho RDBMS: ví dụ, PostgreQuery hỗ trợ CTE đệ quy, nhưng nó cũng cung ltreecấp một bộ lợi thế và bất lợi khác nhau khi triển khai.

Bạn có thể tìm thêm thông tin trên trang web này bằng cách tìm kiếm thông qua thẻ .

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.