0

私たちはアクティビティビルダーを作成しており、さまざまなタイプの1人の親の子に対処するための良い方法に苦労しています。

カテゴリとアクティビティの2つのテーブルがあります。カテゴリにはIDがあり、名前アクティビティにはIDと親IDがあります

アクティビティの親IDは、カテゴリのIDまたは別のアクティビティのIDのいずれかになります。カテゴリにはアクティビティがあり、それらの各アクティビティにはサブアクティビティを含めることができます。カテゴリは最上位のみであるため、サブカテゴリを持つカテゴリやアクティビティはありません

ここで、テーブルを設定するための最良の方法は何かという2つの質問があります。それらを別々の列に格納することを考えました。同じ列にIDとある種のフラグがあり、列にIDがあり、別の列に親テーブルがあります。

私はこれらのどれもあまり良いとは思わないので、何であるか知りたいです。

もう1つの質問は、このテーブルをどのようにプルするかです。複数のルックアップを実行できることは知っていますが、すべてを1つで実行する方法があるかどうか迷っていました。

MSSQL2012を使用しています

明確にし、より多くの情報を追加しようとするために編集されました

4

1 に答える 1

0

私はSQLの「オーバーロード」の大ファンではありません。つまり、列には1つのことだけを意味するデータが含まれている必要があります。したがって、次のデータ構造をお勧めします。

カテゴリ=>ID| 名前

アクティビティ=>ID| 名前| CategoryIdはnullではありません| ParentActivityId null

このように、すべてのアクティビティはカテゴリに関連付けられ、親アクティビティに関連付けることができます。

「引っ張る」限り?データを選択するという意味ですか?

SELECT a.Name AS ActivityName, c.Name AS ParentName, c.Id AS ParentId
FROM Category c
JOIN Activity a
ON c.Id = a.CategoryId
WHERE a.ParentActivityId IS NULL

UNION 

SELECT a.Name AS ActivityName, c.Name AS ParentName, c.Id AS ParentId
FROM Activity c
JOIN Activity a
ON c.Id = a.ParentActivityId
于 2013-03-25T19:45:45.083 に答える