木構造


下記のような階層構造を持ったデータは
「入れ子区間モデル」などで扱えるが楽にクエリで入れ子属性をつけられないか考え中…

SQL Server 2012は階層構造用のデータ格納型を持つ
hierarchyid
http://technet.microsoft.com/ja-jp/library/bb677290.aspx

CREATE TABLE LINE 
	(
     ID int identity primary key, 
     FROM_ID int,
     TO_ID int
    );

INSERT INTO LINE
 (FROM_ID, TO_ID)
VALUES
 (1, 2),
 (2, 4),
 (1, 3),
 (3, 5),
 (3, 6);

CREATE TABLE POINT
	(
     ID int primary key, 
    );

INSERT INTO POINT
 (ID)
VALUES
 (1),
 (2),
 (3),
 (4),
 (5),
 (6);


ちなみに深さは下記のように求められる?

WITH cte (FROM_ID, TO_ID,DEPTH)
AS
(
 SELECT FROM_ID, TO_ID, 0
  FROM LINE
   WHERE FROM_ID = 1

	UNION ALL

 -- 再帰
 SELECT dst.FROM_ID, dst.TO_ID, M.DEPTH + 1
  FROM LINE AS dst
   INNER JOIN cte AS M
     ON dst.FROM_ID = M.TO_ID
)

SELECT * FROM cte;
カテゴリー: 開発, 設計 タグ: パーマリンク