X-Git-Url: http://mop.ddnsfree.com/gitweb/?p=brisk.git;a=blobdiff_plain;f=sql%2Fsql.d%2F075-users-network.sql;h=d6c2f61677c656bd8c09310e8175f67c0b5d124b;hp=9356b378e874cc42408288b72bab25111579468f;hb=330d75c856cac51f3136b1ab1791c8ef8c564ac0;hpb=34f47608a4812b8b32c97a0a776de69d750e3d6b diff --git a/sql/sql.d/075-users-network.sql b/sql/sql.d/075-users-network.sql index 9356b37..d6c2f61 100644 --- a/sql/sql.d/075-users-network.sql +++ b/sql/sql.d/075-users-network.sql @@ -5,11 +5,14 @@ DROP TABLE IF EXISTS #PFX#usersnet; CREATE TABLE #PFX#usersnet ( owner integer REFERENCES #PFX#users (code) ON DELETE cascade ON UPDATE cascade, -- network owner + inher integer NULL REFERENCES #PFX#users (code) + ON DELETE cascade ON UPDATE cascade, -- inheriting user target integer REFERENCES #PFX#users (code) ON DELETE cascade ON UPDATE cascade, -- evaluated user friend integer, -- friendship level - skill integer, -- skill level - trust integer, -- auth + -- 1"black", 2"unknown", 3"test", 4"friend", 5"bff" + skill float, -- skill level + trust float, -- auth ctime timestamp DEFAULT now(), -- creation time mtime timestamp DEFAULT to_timestamp(0) -- modification time ); @@ -17,8 +20,28 @@ CREATE TABLE #PFX#usersnet ( DROP INDEX IF EXISTS #PFX#usersnet_owner_idx; DROP INDEX IF EXISTS #PFX#usersnet_target_idx; DROP INDEX IF EXISTS #PFX#usersnet_owner_target_idx; +DROP INDEX IF EXISTS #PFX#usersnet_owner_inher_idx; +DROP INDEX IF EXISTS #PFX#usersnet_owner_target_inher_idx; + CREATE INDEX #PFX#usersnet_owner_idx ON #PFX#usersnet (owner); CREATE INDEX #PFX#usersnet_target_idx ON #PFX#usersnet (target); -CREATE UNIQUE INDEX #PFX#usersnet_owner_target_idx ON #PFX#usersnet (owner,target); +CREATE INDEX #PFX#usersnet_owner_target_idx ON #PFX#usersnet (owner, target); +CREATE INDEX #PFX#usersnet_owner_inher_idx ON #PFX#usersnet (owner,inher); +CREATE UNIQUE INDEX #PFX#usersnet_owner_target_inher_idx ON #PFX#usersnet (owner, target, inher); + +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 bsk_usersnet AS un, bsk_usersnet AS ur + WHERE un.owner = 10101 -- owner is xxx + AND un.target = ur.owner AND un.friend >= 4 -- 'un' is, at least, our friend + GROUP BY un.owner, ur.target; +DROP VIEW #PFX#usersnet_narrowskill; +CREATE VIEW #PFX#usersnet_narrowskill + AS SELECT un.owner, ur.target, SUM(ur.skill * un.trust) / SUM(un.trust) as skill, count(*) as count + FROM bsk_usersnet AS un, bsk_usersnet AS ur -- 'un' primary records, 'ur' inheriting records + WHERE un.owner = 10101 -- owner is xxx + AND un.target = ur.owner AND un.friend = 5 -- 'un' is, at least, our friend + GROUP BY un.owner, ur.target;