danh sách liên kết trong SQL và cây


8

Mặc dù SQL được liên kết nhiều hơn với các bảng như các hoạt động và không quá nhiều với đệ quy, giả sử chúng tôi muốn triển khai khái niệm danh sách được liên kết (hoặc liên kết đôi) (ví dụ như chúng tôi có trong C).
Có cách nào để làm điều này một cách hiệu quả, xem xét rằng chúng ta có thể có các vật phẩm di chuyển từ bất kỳ nơi nào vào bất kỳ nơi nào trong danh sách được liên kết?
Một số giải pháp sử dụng CLR?
Hay nó thực sự là thứ không bao giờ được mang đến SQL Server?

Lưu ý rằng câu hỏi này cũng đã phát triển thành một danh sách liên kết thảo luận về cây VS

Mặc dù tôi đã ghim SQL Server, đây là một câu hỏi giống như học thuật, do đó, một giải pháp trong bất kỳ vấn đề nào khác cũng tốt, ngay cả khi chúng tôi chỉ đưa ra kết luận rằng đây là điều không bao giờ nên được đưa vào cơ sở dữ liệu.

Câu trả lời:


10

Một danh sách liên kết chỉ là một biểu đồ chu kỳ có hướng rất đơn giản. Không có lý do tại sao điều này là trong bất kỳ cách nào khó khăn, hoặc nên tránh cho máy chủ sql.

Hãy nghĩ về nó, cấu trúc cây phức tạp hơn danh sách liên kết. Mỗi lần thực hiện một diễn đàn trên internet lưu trữ dữ liệu trong cơ sở dữ liệu quan hệ đã thực hiện những điều cơ bản của danh sách được liên kết. Trên chính trang này, câu trả lời tạo thành một danh sách liên kết. Chúng có thể được thêm và xóa. Họ có thể được di chuyển trong vị trí (aka, được xếp hạng bằng phiếu).

Đại diện cụ thể được sử dụng chỉ phụ thuộc vào sự đánh đổi mà bạn muốn thực hiện giữa việc duy trì danh sách (chèn, cập nhật, xóa) và truy xuất.

--Works great for INS/UPD/DEL, In order retrieval isn't the best.
CREATE TABLE Item (id int identity, next int, prev int) 

--makes in order retrieval fast, deletes are a problem, inserts may require re-numbering.    
CREATE TABLE Item (id int identity, position  int ) 

--Works great for in-order retrieval, and allow cheap insertion/deletion, 
--certain edge cases might be tricky to handle.
CREATE TABLE (id int identity, position Decimal(24,12 )  ) 
--for inserts, use the average of the before and after, for deletes, just delete.

Cập nhật: Câu hỏi là về cây và danh sách được liên kết trong máy chủ SQL

SQL Server có kiểu dữ liệu HVELyId được thiết kế để dễ dàng thực hiện và truy vấn các cấu trúc giống như cây.

CREATE TABLE Item (id int identity, NodeId HierarchyId)
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.