0

我正在尝试在 SQL Server 中设计一个完全由查询/过程驱动的“Kevin Bacon number finder”,甚至不确定从哪里开始。如果有人可以提供一些帮助,或者向我指出类似的东西,我将不胜感激,因为我已经搜索过并且无法找到与我需要的类似的东西,而不依赖于使用 OO 编程。

“凯文培根数”是指“凯文培根的六度”,其中演员可以通过他或她的电影角色在六个步骤内与演员凯文培根联系起来。但是,即使超过 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。任何剩余的空值都与 Kevin Bacon 没有关系

于 2012-04-11T21:32:22.483 回答