2008-12-10 31 views
11

Tôi có một tiền tố trie. Lược đồ được đề nghị để biểu diễn cấu trúc này trong một cơ sở dữ liệu quan hệ là gì? Tôi cần kết hợp chuỗi con để duy trì hiệu quả.Làm thế nào để bạn lưu trữ một trie trong một cơ sở dữ liệu quan hệ?

+1

Có, trie không phải cây. Xem http://en.wikipedia.org/wiki/Trie – dkretz

+0

Bạn có đang lưu trữ và truy xuất trie đến/từ DB được sử dụng trong mã của bạn không? Vì tìm kiếm DB có các công cụ tích hợp như lập chỉ mục toàn văn (dựa trên các nguyên tắc tương tự) –

Trả lời

6

Thiết kế Materialized Path như thế nào?

CREATE TABLE trie (
    path VARCHAR(<maxdepth>) PRIMARY KEY, 
    ...other attributes of a tree node... 
); 

Để lưu trữ một từ như "stackoverflow":

INSERT INTO trie (path) VALUES 
    ('s'), ('st'), ('sta'), ('stac'), ('stack'), 
    ('stacko'), ('stackov'), ('stackove'), ('stackover'), 
    ('stackover'), ('stackoverf'), ('stackoverflo'), 
    ('stackoverflow'); 

Đường dẫn cụ thể hóa trong cây là chuỗi tiền tố của các nhân vật chính nó. Điều này cũng tạo thành khóa chính. Kích thước của cột VARCHAR là độ sâu tối đa của Trie bạn muốn lưu trữ.

Tôi không thể nghĩ ra bất cứ điều gì đơn giản và đơn giản hơn thế nữa, đồng thời bảo quản lưu trữ và tìm kiếm chuỗi hiệu quả.

+1

Liên kết chuyển hướng đến không có gì quan tâm. Đây là phiên bản được lưu trữ: http://web.archive.org/web/20071019044908/http://www.dbazine.com/oracle/or-articles/tropashko4 – Howie

+1

@Howie, cảm ơn, tôi đã trả lời câu hỏi này 5.5 năm trước, vì vậy nó không phải là một bất ngờ mà một số liên kết đi cũ. –

+0

Bạn có thể cho ví dụ về cách bạn truy vấn bảng này để nói "st" và có nhiều từ như "stackoverflowone" – zengr

0

Có tổ chức nào của bạn có mối quan hệ với bất kỳ tổ chức nào khác không? Nếu không, đó là, không quan hệ, một bảng băm với một serialization sẽ làm điều đó.

+0

Đó thực sự không phải là một trie ... Tôi đồng ý rằng nó có thể có ý nghĩa để giữ nó ra khỏi db, nhưng biến nó thành một hashtable? – dgtized

+0

O (1) thuật toán không tốt trong việc tiết kiệm tài nguyên. ;) – yogman

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