1

Status私は、 (とりわけ)「可能な次のステータス」を表すそれ自体と多対多の関係を持つというエンティティを持っています。

アイデアは、ステータス間の遷移の「マップ」を作成できるようにすることです。

現在、特定のステータスにまだリンクされていないステータスのリストを作成して、「このステータスへのリンク」フォームのコンボ ボックスに入力しようとしています (つまり、リンクできるステータスが必要です)。 .

これまでのところ、これを行わない 25 の方法を見つけました。:)

さて、多くの人が詳細を求めています。合理的なデータベース設計の観点から、いくつかのことは当然のことと考えられていました (実際には、それらは答えには関係ありません)。

a) すべてのステータスには、1 つだけの KEY 列、主キーがあります。

b) ステータスは、両方ともステータスの主キーである 2 つの外部キーを持つ結合テーブルによって相互に「接続」されます。

c) ステータス A、B、C、および D がある場合 - ステータス B および C を A に既に「リンク」しているため、A -> B および A -> C を持っている場合、目的はそれらのステータスが存在することを見つけることです。 'A' にまだ接続されていないステータス テーブル。「A」と言うときは、パラメーターとして与えられたステータスを意味します。したがって、ステータス A を見ていたら、「A」に接続されていないすべてのステータスが必要です。私がステータス CI を見ていたら、別のステータスに接続されているかどうかに関係なく、ステータス C に接続されていないすべての人が必要になります。

どんな助けでも大歓迎です。私は一言一句正確なクエリを探しているのではなく、「それができる方法」を探しています。特定の DB 設計に原則を適用する方法は簡単にわかりますが、適用する「原則」を見つけることができませんでした。

4

1 に答える 1

1
select notLinkedStatus from Status notLinkedStatus
where notLinkedStatus.id not in
    (select linkedStatus.id from Status status
     inner join status.linkedStatuses linkedStatus
     where status.id = :theStatusId)
于 2013-02-04T08:51:48.480 に答える