2009-03-29 40 views
8

'Các phương pháp hay nhất' để lưu mẫu hỗn hợp trong cơ sở dữ liệu quan hệ là gì?Lưu trữ các mẫu hỗn hợp (dữ liệu phân cấp) trong cơ sở dữ liệu

Chúng tôi đã sử dụng Chuyển đổi cây đặt hàng trước đã sửa đổi. Điều này rất nhanh để xây dựng toàn bộ cây, nhưng rất chậm để chèn hoặc xóa các nút mới (tất cả các giá trị trái và phải cần được điều chỉnh). Ngoài ra việc truy vấn con của một nút không phải là dễ dàng và rất chậm.

Một điều khác chúng tôi nhận thấy là bạn thực sự phải đảm bảo rằng cây không bị lộn xộn. Bạn cần khóa giao dịch, nếu không các giá trị bên trái và bên phải có thể bị hỏng, và sửa chữa một cây bên trái bị hỏng không phải là một công việc dễ dàng.

Nó hoạt động rất tốt tuy nhiên, sự thay đổi Tree Preorder Tree, nhưng tôi đã tự hỏi nếu có lựa chọn thay thế tốt hơn.

+0

Ir phụ thuộc một chút vào loại truy vấn được sử dụng nhiều nhất. –

Trả lời

6

Trong khi tìm tất cả các hậu duệ của một hàng với MPTT nhanh, việc tìm kiếm tất cả trẻ em có thể bị chậm. Tuy nhiên, bạn sẽ có thể khắc phục điều đó bằng cách thêm trường parent_id vào bảng của bạn ghi lại (có, thừa) phụ huynh của hàng. Sau đó, việc tìm kiếm trở thành:

SELECT * 
FROM tbl 
WHERE parent_id = z 

Vâng, parent_id chứa thông tin không cần thiết, có khả năng denormalizing bảng của bạn - nhưng vì bất kỳ insert/update/delete đã đòi hỏi những thay đổi toàn cầu, giữ parent_id up-to-date là không thêm nhiều trả. Bạn có thể sử dụng trường level ghi lại mức thẳng đứng của hàng, mặc dù thực tế là nhiều hơn có khả năng thay đổi theo một số loại biến đổi nhất định (ví dụ: di chuyển cây con đến một điểm khác trong cây).

Các đồng bằng cũ link-to-cha mẹ đại diện (tức là chỉ có parent_id và không left_pos hoặc right_pos), tất nhiên là nhanh hơn cho chèn/cập nhật nặng khối lượng công việc, nhưng các truy vấn chỉ nó có thể trả lời một cách hiệu quả là "Tìm phụ huynh của X "và" Tìm con của X. " Hầu hết khối lượng công việc liên quan đến đọc nhiều hơn viết, vì vậy thường MPTT là nhanh hơn tổng thể - nhưng có lẽ trong trường hợp của bạn, bạn cần phải xem xét di chuyển ("trở lại") để liên kết với cha mẹ?

0

Cách tốt nhất để lưu trữ dữ liệu vô hình trong cơ sở dữ liệu tôi đã nghe là sử dụng thuộc tính chuỗi trong đó nội dung là danh sách cha mẹ được phân cách bằng dấu hai chấm.

Các vấn đề liên quan