0

SQL Server で完全にクエリ/プロシージャ駆動型の「Kevin Bacon number finder」を設計しようとしていますが、どこから始めればよいかさえわかりません。誰かが何か助けてくれたり、似たようなものを教えてくれたりしたら、OO プログラミングの使用に依存しない必要なものに似たものを検索して見つけることができないので、感謝しています。

「ケビン・ベーコン数」とは、俳優が映画の役割を通じて俳優のケビン・ベーコンに6ステップ以内で結び付けられる「ケビン・ベーコンの6度」を指します。ただし、6ステップを超えてもプロセスのステップ数を見つける必要があります。

Six_Degrees_of_Kevin_Bacon

私が使用しなければならないスキーマは次のとおりです。

ACTOR (id, fname, lname, gender)
MOVIE (id, name, year, rank)
DIRECTORS (id, fname, lname)
CASTS (pid, mid, role)
MOVIE_DIRECTORS (did, mid)
GENRE (genre, mid)

CASTS.pid は ACTOR.id を参照し、CASTS.mid は MOVIE.id を参照します。

4

1 に答える 1

0

俳優と監督のスキーマを拡張して、Kevin Bacon 番号の kbnumber フィールドを追加できる可能性はありますか? 次に、次の行に沿ってストアド プロシージャを簡単に作成できます。

update a 
set a.kbnumber = EXPR(a2.kbnumber + 1) 
from top 1 actor a inner join
movie m on a.mid = m.id inner join
actor a2 on a2.mid = m.id
order by a2.kbnumber ASC
where a.kbnumber is null or a.kbnumber > a2.kbnumber + 1

update a
set a.kbnumber = EXPR(a2.kbnumber + 1) 
from top 1 actor a inner join
movie m on a.mid = m.id inner join
directors a2 on a2.mid = m.id
order by a2.kbnumber ASC
where a.kbnumber is null or a.kbnumber > a2.kbnumber + 1

update a 
set a.kbnumber = EXPR(a2.kbnumber + 1) 
from top 1 directors a inner join
movie m on a.mid = m.id inner join
actor a2 on a2.mid = m.id
order by a2.kbnumber ASC
where a.kbnumber is null or a.kbnumber > a2.kbnumber + 1

update a
set a.kbnumber = EXPR(a2.kbnumber + 1) 
from top 1 directors a inner join
movie m on a.mid = m.id inner join
directors a2 on a2.mid = m.id
order by a2.kbnumber ASC
where a.kbnumber is null or a.kbnumber > a2.kbnumber + 1

更新される kbnumber がなくなるまで、この手順を実行します。残りの null には、Kevin Bacon にさかのぼる関係はありません

于 2012-04-11T21:32:22.483 に答える