リレーショナルデータベースへの格納フォルダ階層
-
23-08-2019 - |
質問
私は、フォルダを表すオブジェクトを持っており、それらがデータベース内で表現されなければならない場合、私は思ったんだけど。
一方では、フォルダオブジェクトを表し、ちょうどフォルダに含まれるオブジェクトのパス値を格納しないことであろう最も簡単な方法のように思えます。私はこれを見るの問題は、あなたがその子孫が契約の大きすぎるではない任意の項目を含まないフォルダを保持することができないということです。また、私はおそらく、パフォーマンスの問題になると思われる、メモリの前払いにすべてをロードせずに(例えばツリービューのように)表示するには、フォルダ階層をロードする方法の明確な考えを持っていません。
の代替は、その親フォルダを参照して、「フォルダ」のテーブルを持つことです。それが動作するはずのようにこれはそうですが、私は限り、彼らは親を共有していないと同じ名前のフォルダを許可するかどうかはわかりませんよ。それも、DBは、と自分自身に関わるべきである何かであるかということは、私はちょうどビジネスロジックに強制すべきものであるべきでしょうか?
解決
アイデアは、この(自己参照)のようなものです。
CREATE TABLE FileSystemObject (
ID int not null primary key identity,
Name varchar(100) not null,
ParentID int null references FileSystemObject(ID),
constraint uk_Path UNIQUE (Name, ParentID),
IsFolder bit not null
)
他のヒント
href="http://www.dynamicalsoftware.com/cr/prod/guest/standard.html" rel="nofollow noreferrer">ページ。別のテーブルに階層をファクタリングは、複数のタクソノミーをサポートするためにあなたを許可します。
最初の目的は、データベース内の階層を維持するのが何であるかを自問してみてください、あなたはそれで何の機能を得ることができます。そして、それをやってに入る作業やメンテナンスを考慮してお願いします。
あなたは、単にツリーコントロールを埋めるためにそれを使用している場合は、、フォルダシステムに対して直接行く組み込みコントロールがあります。それはあなたのために良い仕事しませんか?あなたは、データベースに格納することにより、その超えた何かを得るのですか?どのように外部のDBの変更することができ、実際のフォルダシステムと同期してデータベースを保持することを計画していますか?あなたは、仮想ファイルシステムを提供しない限り、それだけで、データベースに格納され、関連するパスで実物に対して直接行く方が良いかもしれません。
SQL Serverは、階層構造をサポートしていhierarchyid
データ型を持っています。唯一のフルバージョンで動作し、あなたを気にしています。