Bagaimana menyusun model untuk secara tepat dan efisien merepresentasikan data seperti pohon pada basis data relasional?


13

Berdasarkan Traversing data seperti pohon dalam database relasional menggunakan pertanyaan SQL , saya ingin tahu bagaimana cara yang biasa digunakan untuk menggambarkan data seperti pohon pada database relasional mempertimbangkan implikasi fisik?

Saya berasumsi bahwa RDBMS tidak memiliki fitur khusus untuk menangani itu selain SQL ANSI biasa atau fitur umum yang tersedia.

Dalam keraguan saya selalu tertarik pada MySQL dan PostgreSQL dan akhirnya SQLite.

Jawaban:


8

Saya percaya dia akan melakukan sesuatu seperti pohon biner. Saya hanya akan menyertakan tiga kunci yang terkait dengan id unik dari tabel yang sama, satu untuk kiri, satu untuk anak yang tepat, dan satu untuk orang tua.

yaitu- (sangat banyak kodesemu)

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

Pertimbangan untuk item yang ditautkan dua kali lipat adalah bahwa setiap perubahan posisi pohon di bawah skema ini akan menghasilkan tidak kurang dari 3 pembaruan, bukan satu. Seperti yang Anda nyatakan, ini juga merupakan asumsi besar bahwa pohon biner maju / mundur adalah yang diminta.
REW

sangat benar, dalam pengalaman saya, saya lebih suka pajak pembaruan dari daftar yang ditautkan dua kali lipat ke daftar tunggal karena saya sering harus melintasi pohon. tetapi dalam banyak hal ini tidak perlu
Patrick

Itu pasti tergantung pada model yang mendasarinya. Saya pikir jawaban yang diberikan Patrick sudah cukup jika itu model yang tepat.
jcolebrand

6

Jika setiap node benar-benar entitas data yang sama, maka paradigma akan tetap menandakan satu tabel per entitas, dan kolom penghubung untuk pohon traversal di mana setiap node hanya dihubungkan satu kali.

Untuk entitas yang ditautkan pada beberapa titik di pohon, tabel penautan terpisah atau kolom nilai berbeda akan digunakan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.