daftar tertaut dalam SQL dan Pohon

8

Meskipun SQL lebih berafiliasi dengan tabel seperti operasi dan tidak begitu banyak dengan rekursif, katakanlah kami ingin menerapkan konsep daftar tertaut (atau dobel-tautan) (seperti yang kita miliki misalnya dalam C).
Apakah ada cara untuk melakukan ini secara efisien, mengingat bahwa kita dapat memiliki barang bergerak dari mana saja ke tempat mana pun di daftar tertaut?
Beberapa solusi menggunakan CLR?
Atau itu benar-benar sesuatu yang tidak boleh dibawa ke SQL Server?

Perhatikan bahwa pertanyaan ini berkembang juga menjadi daftar tautan VS diskusi pohon

Meskipun saya menyematkan SQL Server, ini adalah pertanyaan seperti akademis, jadi solusi yang lain juga baik, bahkan jika kita sampai pada kesimpulan bahwa ini adalah sesuatu yang tidak boleh dibawa ke database.

JoseTeixeira
sumber

Jawaban:

10

Daftar tertaut hanyalah grafik asiklik terarah yang sangat sederhana. Tidak ada alasan mengapa hal ini sulit, atau harus dihindari untuk server sql.

Pikirkan tentang itu, struktur pohon lebih kompleks daripada daftar yang ditautkan. Setiap implementasi forum di internet yang menyimpan data dalam basis data relasional telah menerapkan dasar-dasar daftar tertaut. Di halaman ini juga, jawaban membentuk daftar yang ditautkan. Mereka dapat ditambahkan dan dihapus. Mereka dapat dipindahkan di posisi (alias, diberi peringkat berdasarkan suara).

Representasi khusus yang akan digunakan hanya bergantung pada trade-off yang ingin Anda buat antara mempertahankan daftar (masukkan, perbarui, hapus) dan pengambilan.

--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.

Pembaruan: Pertanyaannya adalah tentang pohon vs daftar tertaut di SQL server

SQL Server memiliki tipe data HierarchyId yang dirancang untuk memudahkan implementasi dan permintaan struktur seperti pohon.

CREATE TABLE Item (id int identity, NodeId HierarchyId)
StrayCatDBA
sumber