new usersnet schema and viewes created
[brisk.git] / sql / sql.d / 075-users-network.sql
1 --
2 --  Table to manage users trust network
3 --
4 DROP TABLE IF EXISTS #PFX#usersnet;
5 CREATE TABLE #PFX#usersnet (
6        owner      integer REFERENCES #PFX#users (code)
7                   ON DELETE cascade ON UPDATE cascade, -- network owner
8        inher      integer NULL REFERENCES #PFX#users (code)
9                   ON DELETE cascade ON UPDATE cascade, -- inheriting user
10        target     integer REFERENCES #PFX#users (code)
11                   ON DELETE cascade ON UPDATE cascade, -- evaluated user
12        friend     integer,                             -- friendship level
13                        -- 1"black", 2"unknown", 3"test", 4"friend", 5"bff"
14        skill      float,                               -- skill level
15        trust      float,                               -- auth
16        ctime      timestamp DEFAULT now(),             -- creation time
17        mtime      timestamp DEFAULT to_timestamp(0)    -- modification time
18        );
19
20 DROP INDEX IF EXISTS #PFX#usersnet_owner_idx;
21 DROP INDEX IF EXISTS #PFX#usersnet_target_idx;
22 DROP INDEX IF EXISTS #PFX#usersnet_owner_target_idx;
23 DROP INDEX IF EXISTS #PFX#usersnet_owner_inher_idx;
24 DROP INDEX IF EXISTS #PFX#usersnet_owner_target_inher_idx;
25
26 CREATE INDEX #PFX#usersnet_owner_idx ON #PFX#usersnet (owner);
27 CREATE INDEX #PFX#usersnet_target_idx ON #PFX#usersnet (target);
28 CREATE INDEX #PFX#usersnet_owner_target_idx ON #PFX#usersnet (owner, target);
29 CREATE INDEX #PFX#usersnet_owner_inher_idx ON #PFX#usersnet (owner,inher);
30 CREATE UNIQUE INDEX #PFX#usersnet_owner_target_inher_idx ON #PFX#usersnet (owner, target, inher);
31
32 DROP VIEW #PFX#usersnet_wideskill;
33 CREATE VIEW #PFX#usersnet_wideskill
34     AS SELECT un.owner, ur.target, SUM(ur.skill * un.trust) / SUM(un.trust) as skill, count(*) as count
35         FROM bsk_usersnet AS un, bsk_usersnet AS ur
36         WHERE un.owner = 10101                           -- owner is xxx
37             AND un.target = ur.owner AND un.friend >= 4  -- 'un' is, at least, our friend
38         GROUP BY un.owner, ur.target;
39
40 DROP VIEW #PFX#usersnet_narrowskill;
41 CREATE VIEW #PFX#usersnet_narrowskill
42     AS SELECT un.owner, ur.target, SUM(ur.skill * un.trust) / SUM(un.trust) as skill, count(*) as count
43         FROM bsk_usersnet AS un, bsk_usersnet AS ur      -- 'un' primary records, 'ur' inheriting records
44         WHERE un.owner = 10101                           -- owner is xxx
45             AND un.target = ur.owner AND un.friend = 5   -- 'un' is, at least, our friend
46         GROUP BY un.owner, ur.target;
47