+CREATE UNIQUE INDEX #PFX#usersnet_owner_target_idx ON #PFX#usersnet (owner, target);
+
+DROP VIEW #PFX#usersnet_widefriend;
+CREATE VIEW #PFX#usersnet_widefriend
+ AS SELECT un.owner, ur.target, ur.friend, count(*) as count
+ FROM #PFX#usersnet AS un, #PFX#usersnet AS ur
+ WHERE un.target = ur.owner AND un.friend >= 4 -- 'un' is, at least, our friend
+ GROUP BY un.owner, ur.target, ur.friend;
+
+DROP VIEW #PFX#usersnet_narrowfriend;
+CREATE VIEW #PFX#usersnet_narrowfriend
+ AS SELECT un.owner, ur.target, ur.friend, count(*) as count
+ FROM #PFX#usersnet AS un, #PFX#usersnet AS ur
+ WHERE un.target = ur.owner AND un.friend >= 5 -- 'un' is, at least, our friend
+ GROUP BY un.owner, ur.target, ur.friend;
+
+DROP VIEW #PFX#usersnet_wideskill;
+CREATE VIEW #PFX#usersnet_wideskill
+ AS SELECT un.owner, ur.target, SUM(ur.skill * un.trust) / SUM(un.trust) as skill, count(*) as count
+ FROM #PFX#usersnet AS un, #PFX#usersnet AS ur
+ WHERE un.target = ur.owner AND un.friend >= 4 -- 'un' is, at least, our friend
+ AND ur.friend > 2
+ GROUP BY un.owner, ur.target;
+
+DROP VIEW #PFX#usersnet_narrowskill;
+CREATE VIEW #PFX#usersnet_narrowskill
+ AS SELECT
+ un.owner AS owner
+ , ur.target AS target
+ , SUM(ur.skill * un.trust) / SUM(un.trust) AS skill
+ , COUNT(*) AS count
+ FROM #PFX#usersnet AS un, #PFX#usersnet as ur
+ WHERE un.target = ur.owner AND un.friend = 5 -- 'ur' owner must be bbf of un.owner
+ AND ur.friend > 2
+ GROUP BY un.owner, ur.target;