structure.sql 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. -- Database Structure For ohUrlShortener
  2. CREATE DATABASE oh_url_shortener ENCODING 'UTF8';
  3. -- Connect to database repostats
  4. \c oh_url_shortener
  5. CREATE TABLE public.short_urls (
  6. id serial4 NOT NULL,
  7. short_url text NOT NULL,
  8. dest_url varchar(200) NOT NULL,
  9. sha varchar(100) NOT NULL,
  10. created_at timestamp with time zone NOT NULL DEFAULT now(),
  11. is_valid bool NOT NULL DEFAULT true,
  12. CONSTRAINT short_urls_pk PRIMARY KEY (id),
  13. CONSTRAINT short_urls_sha_un UNIQUE (sha)
  14. );
  15. CREATE TABLE public.access_logs (
  16. id serial4 NOT NULL,
  17. short_url varchar(200) NOT NULL,
  18. access_time timestamp with time zone NOT NULL DEFAULT NOW(),
  19. ip varchar(32) NULL,
  20. user_agent varchar(500) NULL,
  21. CONSTRAINT access_logs_pk PRIMARY KEY (id)
  22. );
  23. CREATE INDEX access_logs_short_url_idx ON public.access_logs (short_url);
  24. CREATE INDEX access_logs_access_time_idx ON public.access_logs (access_time);
  25. CREATE INDEX access_logs_ip_idx ON public.access_logs (ip);
  26. CREATE VIEW public.url_puv AS
  27. SELECT
  28. l.SHORT_URL AS "Short_URL",
  29. count(l.ip) AS "IP_Count",
  30. count(DISTINCT(l.ip)) AS "Distinct_IP_Count"
  31. FROM public.access_logs l
  32. GROUP BY l.short_url;
  33. CREATE VIEW public.puv_by_date AS
  34. SELECT
  35. date(l.access_time) AS "Access_Date",
  36. count(l.ip) AS "IP_Count",
  37. count(DISTINCT(l.ip)) AS "Distinct_IP_Count"
  38. FROM public.access_logs l
  39. GROUP BY date(l.access_time)
  40. ORDER BY "Access_Date" DESC;