SQLとツリーのリンクリスト


8

SQLはテーブルのような操作とより密接に関連しており、再帰的ではありませんが、リンクされた(またはダブルリンクされた)リストの概念(たとえば、Cにあるような)を実装したいとします。
リンクされたリストの任意の場所から任意の場所にアイテムを移動できることを考慮して、これを効率的に行う方法はありますか?
CLRを使用するいくつかのソリューション?
それとも、SQL Serverに持ち込まないでください。

この質問はリンクされたリストVSツリーの議論にも発展したことに注意してください

私はSQL Serverをピン留めしましたが、これは学術的な質問なので、これはデータベースに持ち込むべきではないという結論に達したとしても、他のソリューションでも良いです。

回答:


10

リンクされたリストは、非常に単純な有向非循環グラフです。これが何らかの方法で難しい理由や、SQLサーバーでは回避する必要がある理由はありません。

考えてみてください。ツリー構造はリンクリストよりも複雑です。リレーショナルデータベースにデータを保存するインターネット上のフォーラムのすべての実装は、リンクリストの基本を実装しています。このページでは、回答がリンクされたリストを形成します。追加および削除できます。それらは位置に移動することができます(別名、投票によってランク付けされます)。

使用される特定の表現は、リストの維持(挿入、更新、削除)と取得の間のトレードオフにのみ依存します。

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

更新:質問は、SQLサーバーのツリーとリンクリストに関するものです

SQL Serverには、ツリーのような構造の実装とクエリを容易にするために設計されたHierarchyIdデータ型があります。

CREATE TABLE Item (id int identity, NodeId HierarchyId)
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.