Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основа курсач.docx
Скачиваний:
68
Добавлен:
14.12.2018
Размер:
234.62 Кб
Скачать

2.6 Створення користувача

Створюємо користувача remote_user ы надаэмо йому право на перегляд деяких таблиць

CREATE USER remote_user WITH ENCRYPTED PASSWORD 'remote';

GRANT SELECT ON "Абитуриент", "Место проживания", "Среднеобр. заведение" TO remote_user;

Створюємо другого користувача secretary та надаємо йому усі права у усіх таблицях окрім права на видалення даних

CREATE USER secretary WITH ENCRYPTED PASSWORD 'secretary';

GRANT SELECT, INSERT, UPDATE ON ALL TABLES IN SCHEMA public TO secretary;

Висновки

В ході виконання курсової роботи були застосовані систематизовані інформаційні ресурси, а саме створення баз даних, котрі є актуальними на даний момент часу.

Під час виконання була спроектована та організована база даних для підтримки роботи приймальної комісії. На першому етапі були розроблені сутності котрі мали бути присутні в базі та які відповідають предметній області. За допомогою інтернет-ресурсу для проектування баз даних було створено схему даних, що і представляє необхідну базу даних. На основі схеми та за допомогою СУДБ PostgreSQL були створені відповідні сутності та необхідна логіка, що дозволяє єфективно працювати розробленій базі.

База даних, що була створена виконує всі поставлені задачі. Створені відповідні функції, тригери, та представлення, які в у злагодженій роботі вирішують необхідні задачі чи підтримують цілісність бази.

СУБД PostgreSQL, що є однією з найрозвиненіших в своїй категорії, дозволяє повноцінну реалізацію баз даних на основі SQL, забезпечує всі стандарти SQL, підтримує великий набір вбудованих типів даних, більш того, користувач може створювати нові необхідні йому типи.

Завершуючи роботу, можна прийти до висновку, що SQL - це високорівнева мова запитів, призначена для роботи з базами даних. Вона дозволяє модифікувати дані, складати і виконувати запити, виводити результати у вигляді звітів.

Перелік посилань

  1. Глава М. Г., Блажко О. А., Проектування баз даних: ВМВ, 2012.- 248 с.

  2. http://datasql.ru/basesql/14.htm Проектирование баз данных. Триггеры, функции, представления, подзапросы. - 2016.

  3. http://www.websecure.ru/index.php?module=pages&id=24

  4. http://saikt-online.ru/chto-takoe-bazy-dannyx-i-zachem-ix-izuchat/

  5. http://postgresql.ru.net/gruber/ch20.html

  6. Карвин Б. Програмування баз даних SQL: КТ, 2012. - 304 с.

  7. Хомоненко А. Д., Мальцев М. Г., Цыганков В. М., Базы данных: ТМВ, 2014. - 298 с.

  8. Хэндерсон К. Профессиональное руководство по SQL Server: ТМВ, 2010. – 329 с.

Додаток а (код програми)

SET statement_timeout = 0;

SET lock_timeout = 0;

SET client_encoding = 'UTF8';

SET standard_conforming_strings = on;

SELECT pg_catalog.set_config('search_path', '', false);

SET check_function_bodies = false;

SET client_min_messages = warning;

SET row_security = off; CREATE EXTENSION IF NOT EXISTS plpgsql WITH SCHEMA pg_catalog;

COMMENT ON EXTENSION plpgsql IS 'PL/pgSQL procedural language';

CREATE TYPE public.benefit AS ENUM (

'Сирота',

'Инвалидность',

'Участник боевых действий',

'Многодетная семья'

);

ALTER TYPE public.benefit OWNER TO postgres; SET default_tablespace = ''; SET default_with_oids = false; CREATE TABLE public."Абитуриент" (

"Рег. номер" integer NOT NULL,

"Имя" text,

"Фамилия" text,

"Отчество" text,

"Дата рождения" date,

"Льготы" public.benefit,

"Среднеобр. заведение" integer,

"Дата получения средн. обр." date,

"Наличие наград" boolean,

"Место проживания" integer,

"Специальность" integer

);

ALTER TABLE public."Абитуриент" OWNER TO postgres; CREATE FUNCTION public."Абитуриенты из региона"(text) RETURNS SETOF public."Абитуриент"

LANGUAGE sql

AS $_$

SELECT А.* FROM "Абитуриент" А

INNER JOIN "Место проживания" М ON М."Код" = А."Место проживания"

WHERE М."Территория" = $1;

$_$;

ALTER FUNCTION public."Абитуриенты из региона"(text) OWNER TO postgres; CREATE FUNCTION public."Абитуриенты на специальность"(text) RETURNS SETOF public."Абитуриент"

LANGUAGE sql

AS $_$

SELECT * FROM "Абитуриент" WHERE "Специальность" IN (SELECT "Код" FROM "Специальность" WHERE "Название" = $1)

ORDER BY "Фамилия";

$_$;

ALTER FUNCTION public."Абитуриенты на специальность"(text) OWNER TO postgres; CREATE FUNCTION public."Предметы по специальности"(text) RETURNS TABLE("Код предмета" integer, "Название" text)

LANGUAGE sql

AS $_$

SELECT "Предм_Код", "Предм_Название" FROM "Предметы для специальностей" WHERE "Спец_Название" = $1;

$_$;

ALTER FUNCTION public."Предметы по специальности"(text) OWNER TO postgres; CREATE FUNCTION public."Проверка добавления предмета"() RETURNS trigger

LANGUAGE plpgsql

AS $$

BEGIN

IF (SELECT "Название" FROM "Предмет" WHERE "Название" = NEW."Название") IS NOT NULL THEN

RAISE EXCEPTION 'Такой предмет уже создан';

END IF;

RETURN NEW;

END;

$$;

ALTER FUNCTION public."Проверка добавления предмета"() OWNER TO postgres; CREATE FUNCTION public."Проверка номера телефона"() RETURNS trigger

LANGUAGE plpgsql

AS $$

BEGIN

IF char_length(NEW."Телефон") != 7 THEN

RAISE EXCEPTION 'Номер лелефона имеет отличное от 7 количество знаков';

END IF;

RETURN NEW;

END;

$$;

ALTER FUNCTION public."Проверка номера телефона"() OWNER TO postgres; CREATE FUNCTION public."Проверка совп. добавл. оценок"() RETURNS trigger

LANGUAGE plpgsql

AS $$

BEGIN

IF (SELECT "Предмет" FROM "Оценка ЗНО" WHERE "Предмет" = NEW."Предмет" AND "Абитуриент" = NEW."Абитуриент") IS NOT NULL THEN

RAISE EXCEPTION 'Оценка по этому предмету уже присутствует';

END IF;

RETURN NEW;

END;

$$;

ALTER FUNCTION public."Проверка совп. добавл. оценок"() OWNER TO postgres; CREATE FUNCTION public."Проверка средн. обр"() RETURNS trigger

LANGUAGE plpgsql

AS $$

BEGIN

IF NEW."Дата получения средн. обр." > CURRENT_DATE OR NEW."Среднеобр. заведение" IS NULL THEN

RAISE EXCEPTION 'Дата некорректна';

End If;

Return NEW;

END;

$$;

ALTER FUNCTION public."Проверка средн. обр"() OWNER TO postgres; CREATE FUNCTION public."Удаление оценок абитур."() RETURNS trigger

LANGUAGE plpgsql

AS $$

BEGIN

DELETE FROM "Оценка ЗНО" WHERE "Абитуриент" = OLD."Рег. номер";

RETURN OLD;

END;

$$;

ALTER FUNCTION public."Удаление оценок абитур."() OWNER TO postgres; CREATE TABLE public."Оценка ЗНО" (

"Код" integer NOT NULL,

"Предмет" integer,

"Оценка" integer,

"Абитуриент" integer

);

ALTER TABLE public."Оценка ЗНО" OWNER TO postgres; CREATE VIEW public."10 лучших абитуриентов" AS

SELECT "А"."Рег. номер",

"А"."Имя",

"А"."Фамилия",

"А"."Отчество",

"А"."Дата рождения",

"А"."Льготы",

"А"."Среднеобр. заведение",

"А"."Дата получения средн. обр.",

"А"."Наличие наград",

"А"."Место проживания",

"А"."Специальность"

FROM public."Абитуриент" "А"

WHERE ("А"."Рег. номер" IN ( SELECT "Оценка ЗНО"."Абитуриент" AS "Сумма баллов"

FROM public."Оценка ЗНО"

GROUP BY "Оценка ЗНО"."Абитуриент"

ORDER BY (sum("Оценка ЗНО"."Оценка")) DESC

LIMIT 10));

ALTER TABLE public."10 лучших абитуриентов" OWNER TO postgres; CREATE SEQUENCE public."Абитуриент_Рег. номер_seq"

START WITH 1

INCREMENT BY 1

NO MINVALUE

NO MAXVALUE

CACHE 1;

ALTER TABLE public."Абитуриент_Рег. номер_seq" OWNER TO postgres; ALTER SEQUENCE public."Абитуриент_Рег. номер_seq" OWNED BY public."Абитуриент"."Рег. номер";

CREATE VIEW public."Льготники" AS

SELECT "А"."Рег. номер",

"А"."Имя",

"А"."Фамилия",

"А"."Отчество",

"А"."Дата рождения",

"А"."Льготы",

"А"."Среднеобр. заведение",

"А"."Дата получения средн. обр.",

"А"."Наличие наград",

"А"."Место проживания",

"А"."Специальность"

FROM public."Абитуриент" "А"

WHERE ("А"."Льготы" IS NOT NULL);

ALTER TABLE public."Льготники" OWNER TO postgres; CREATE TABLE public."Место проживания" (

"Код" integer NOT NULL,

"Индекс" integer,

"Территория" text,

"Населенный пункт" text,

"Улица" text,

"Номер дома" integer,

"Телефон" text

);

ALTER TABLE public."Место проживания" OWNER TO postgres; CREATE SEQUENCE public."Место проживания_Код_seq"

START WITH 1

INCREMENT BY 1

NO MINVALUE

NO MAXVALUE

CACHE 1;

ALTER TABLE public."Место проживания_Код_seq" OWNER TO postgres; ALTER SEQUENCE public."Место проживания_Код_seq" OWNED BY public."Место проживания"."Код";

CREATE SEQUENCE public."Оценка ЗНО_Код_seq"

START WITH 1

INCREMENT BY 1

NO MINVALUE

NO MAXVALUE

CACHE 1;

ALTER TABLE public."Оценка ЗНО_Код_seq" OWNER TO postgres; ALTER SEQUENCE public."Оценка ЗНО_Код_seq" OWNED BY public."Оценка ЗНО"."Код";

CREATE TABLE public."Предм_Спец" (

"Код" integer NOT NULL,

"Предмет" integer,

"Специальность" integer

);

ALTER TABLE public."Предм_Спец" OWNER TO postgres; CREATE SEQUENCE public."Предм_Спец_Код_seq"

START WITH 1

INCREMENT BY 1

NO MINVALUE

NO MAXVALUE

CACHE 1;

ALTER TABLE public."Предм_Спец_Код_seq" OWNER TO postgres; ALTER SEQUENCE public."Предм_Спец_Код_seq" OWNED BY public."Предм_Спец"."Код";

CREATE TABLE public."Предмет" (

"Код" integer NOT NULL,

"Название" text NOT NULL

);

ALTER TABLE public."Предмет" OWNER TO postgres; CREATE TABLE public."Специальность" (

"Код" integer NOT NULL,

"Название" text

);

ALTER TABLE public."Специальность" OWNER TO postgres; CREATE VIEW public."Предметы для специальностей" AS

SELECT "Сп"."Код" AS "Спец_Код",

"Сп"."Название" AS "Спец_Название",

"ПС"."Предмет" AS "Предм_Код",

"Пр"."Название" AS "Предм_Название"

FROM ((public."Специальность" "Сп"

JOIN public."Предм_Спец" "ПС" ON (("ПС"."Специальность" = "Сп"."Код")))

JOIN public."Предмет" "Пр" ON (("ПС"."Предмет" = "Пр"."Код")));

ALTER TABLE public."Предметы для специальностей" OWNER TO postgres; CREATE TABLE public."Среднеобр. заведение" (

"Код заведения" integer NOT NULL,

"Название" text,

"Город" text

);

ALTER TABLE public."Среднеобр. заведение" OWNER TO postgres; ALTER TABLE ONLY public."Абитуриент" ALTER COLUMN "Рег. номер" SET DEFAULT nextval('public."Абитуриент_Рег. номер_seq"'::regclass);

ALTER TABLE ONLY public."Место проживания" ALTER COLUMN "Код" SET DEFAULT nextval('public."Место проживания_Код_seq"'::regclass);

ALTER TABLE ONLY public."Оценка ЗНО" ALTER COLUMN "Код" SET DEFAULT nextval('public."Оценка ЗНО_Код_seq"'::regclass);

ALTER TABLE ONLY public."Предм_Спец" ALTER COLUMN "Код" SET DEFAULT nextval('public."Предм_Спец_Код_seq"'::regclass);

COPY public."Абитуриент" ("Рег. номер", "Имя", "Фамилия", "Отчество", "Дата рождения", "Льготы", "Среднеобр. заведение", "Дата получения средн. обр.", "Наличие наград", "Место проживания", "Специальность") FROM stdin;

2 Иван Иванов Иванович 2000-08-04 Многодетная семья 234 2016-08-01 f 3 121

3 Андрей Коновалов Петрович 1970-03-14 Инвалидность 24 2010-08-01 f 1 131

4 Петр Герасимов Николаевич 1999-03-14 \N 12 2018-08-01 t 2 131

10 Георгий Петрович Павлов\r 1999-05-12 \N 24 2017-05-23 t 4 103

\.

SELECT pg_catalog.setval('public."Абитуриент_Рег. номер_seq"', 10, true);

COPY public."Место проживания" ("Код", "Индекс", "Территория", "Населенный пункт", "Улица", "Номер дома", "Телефон") FROM stdin;

2 747385 Луганская область Луганск Геологическая 3 480293

5 345342 Криворожская область Кривой Рог Петрова 151 659349

6 847385 Луганская область Родаково Виноградная 159 0483748

1 678473 Одеcская область Одесса Маршала говорова 11 348593

4 678473 Одеcская область Одесса Маршала говорова 44 948593

3 678473 Одеcская область Одесса Шевченко 431 355464

8 657855 Киевская область Киев Андреувский спуск 1 4564354

\.

SELECT pg_catalog.setval('public."Место проживания_Код_seq"', 9, true);

COPY public."Оценка ЗНО" ("Код", "Предмет", "Оценка", "Абитуриент") FROM stdin;

1 12 98 2

2 12 78 3

3 12 50 4

4 52 90 2

5 52 2 3

6 52 70 4

7 38 34 2

8 38 89 3

9 38 75 4

12 22 80 3

\.

SELECT pg_catalog.setval('public."Оценка ЗНО_Код_seq"', 13, true);

COPY public."Предм_Спец" ("Код", "Предмет", "Специальность") FROM stdin;

1 12 121

2 12 131

3 12 342

4 12 12

5 12 103

6 38 121

7 38 12

8 52 121

9 52 131

10 52 103

11 38 103

\.

SELECT pg_catalog.setval('public."Предм_Спец_Код_seq"', 11, true);

COPY public."Предмет" ("Код", "Название") FROM stdin;

12 Украинский язык

38 Английский язык

52 Математика

24 История

34 Биология

85 Химия

63 Право

72 Русский язык

22 Физика\r

\.

COPY public."Специальность" ("Код", "Название") FROM stdin;

121 Компютерные науки

131 Прикладная математика

342 Биотехнологии

12 Международное право

103 Моделирование физических процессов

\.

COPY public."Среднеобр. заведение" ("Код заведения", "Название", "Город") FROM stdin;

234 Одесская общеобразоательная школа 65 Одесса

12 Одесская гимназия 1 Одесса

24 Родаковская общеобразоательная школа 2 Родаково

\.

ALTER TABLE ONLY public."Абитуриент"

ADD CONSTRAINT "Абитуриент_pkey" PRIMARY KEY ("Рег. номер");

ALTER TABLE ONLY public."Место проживания"

ADD CONSTRAINT "Место проживания_pkey" PRIMARY KEY ("Код");

ALTER TABLE ONLY public."Оценка ЗНО"

ADD CONSTRAINT "Оценка ЗНО_pkey" PRIMARY KEY ("Код");

ALTER TABLE ONLY public."Предм_Спец"

ADD CONSTRAINT "Предм_Спец_pkey" PRIMARY KEY ("Код");

ALTER TABLE ONLY public."Предмет"

ADD CONSTRAINT "Предмет_pkey" PRIMARY KEY ("Код");

ALTER TABLE ONLY public."Специальность"

ADD CONSTRAINT "Специальность_pkey" PRIMARY KEY ("Код");

ALTER TABLE ONLY public."Среднеобр. заведение"

ADD CONSTRAINT "Средн-обр. заведение_pkey" PRIMARY KEY ("Код заведения");

CREATE TRIGGER "Проверка Оценки" BEFORE INSERT ON public."Оценка ЗНО" FOR EACH ROW EXECUTE PROCEDURE public."Проверка совп. добавл. оценок"();

CREATE TRIGGER "Проверка предмета" BEFORE INSERT ON public."Предмет" FOR EACH ROW EXECUTE PROCEDURE public."Проверка добавления предмета"();

CREATE TRIGGER "Проверка средн. обр." BEFORE INSERT OR UPDATE ON public."Абитуриент" FOR EACH ROW EXECUTE PROCEDURE public."Проверка средн. обр"();

CREATE TRIGGER "Проверка телефона" BEFORE INSERT ON public."Место проживания" FOR EACH ROW EXECUTE PROCEDURE public."Проверка номера телефона"();

CREATE TRIGGER "Удаление связанн. оценок" AFTER DELETE ON public."Оценка ЗНО" FOR EACH ROW EXECUTE PROCEDURE public."Удаление оценок абитур."();

ALTER TABLE ONLY public."Абитуриент"

ADD CONSTRAINT "Абитуриент_Место проживания_fkey" FOREIGN KEY ("Место проживания") REFERENCES public."Место проживания"("Код");

ALTER TABLE ONLY public."Абитуриент"

ADD CONSTRAINT "Абитуриент_Специальность_fkey" FOREIGN KEY ("Специальность") REFERENCES public."Специальность"("Код");

ALTER TABLE ONLY public."Абитуриент"

ADD CONSTRAINT "Абитуриент_Среднеобр. заведени_fkey" FOREIGN KEY ("Среднеобр. заведение") REFERENCES public."Среднеобр. заведение"("Код заведения");

ALTER TABLE ONLY public."Оценка ЗНО"

ADD CONSTRAINT "Оценка ЗНО_Абитуриент_fkey" FOREIGN KEY ("Абитуриент") REFERENCES public."Абитуриент"("Рег. номер");

ALTER TABLE ONLY public."Оценка ЗНО"

ADD CONSTRAINT "Оценка ЗНО_Предмет_fkey" FOREIGN KEY ("Предмет") REFERENCES public."Предмет"("Код");

ALTER TABLE ONLY public."Предм_Спец"

ADD CONSTRAINT "Предм_Спец_Предмет_fkey" FOREIGN KEY ("Предмет") REFERENCES public."Предмет"("Код");

ALTER TABLE ONLY public."Предм_Спец"

ADD CONSTRAINT "Предм_Спец_Специальность_fkey" FOREIGN KEY ("Специальность") REFERENCES public."Специальность"("Код");

REVOKE ALL ON SCHEMA public FROM PUBLIC;

REVOKE ALL ON SCHEMA public FROM postgres;

GRANT ALL ON SCHEMA public TO postgres;

GRANT ALL ON SCHEMA public TO PUBLIC;

REVOKE ALL ON TABLE public."Абитуриент" FROM PUBLIC;

REVOKE ALL ON TABLE public."Абитуриент" FROM postgres;

GRANT ALL ON TABLE public."Абитуриент" TO postgres;

GRANT SELECT ON TABLE public."Абитуриент" TO remote_user;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Абитуриент" TO secretary;

REVOKE ALL ON TABLE public."Оценка ЗНО" FROM PUBLIC;

REVOKE ALL ON TABLE public."Оценка ЗНО" FROM postgres;

GRANT ALL ON TABLE public."Оценка ЗНО" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Оценка ЗНО" TO secretary;

REVOKE ALL ON TABLE public."10 лучших абитуриентов" FROM PUBLIC;

REVOKE ALL ON TABLE public."10 лучших абитуриентов" FROM postgres;

GRANT ALL ON TABLE public."10 лучших абитуриентов" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."10 лучших абитуриентов" TO secretary;

REVOKE ALL ON TABLE public."Льготники" FROM PUBLIC;

REVOKE ALL ON TABLE public."Льготники" FROM postgres;

GRANT ALL ON TABLE public."Льготники" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Льготники" TO secretary;

REVOKE ALL ON TABLE public."Место проживания" FROM PUBLIC;

REVOKE ALL ON TABLE public."Место проживания" FROM postgres;

GRANT ALL ON TABLE public."Место проживания" TO postgres;

GRANT SELECT ON TABLE public."Место проживания" TO remote_user;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Место проживания" TO secretary;

REVOKE ALL ON TABLE public."Предм_Спец" FROM PUBLIC;

REVOKE ALL ON TABLE public."Предм_Спец" FROM postgres;

GRANT ALL ON TABLE public."Предм_Спец" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Предм_Спец" TO secretary;

REVOKE ALL ON TABLE public."Предмет" FROM PUBLIC;

REVOKE ALL ON TABLE public."Предмет" FROM postgres;

GRANT ALL ON TABLE public."Предмет" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Предмет" TO secretary;

REVOKE ALL ON TABLE public."Специальность" FROM PUBLIC;

REVOKE ALL ON TABLE public."Специальность" FROM postgres;

GRANT ALL ON TABLE public."Специальность" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Специальность" TO secretary;

REVOKE ALL ON TABLE public."Предметы для специальностей" FROM PUBLIC;

REVOKE ALL ON TABLE public."Предметы для специальностей" FROM postgres;

GRANT ALL ON TABLE public."Предметы для специальностей" TO postgres;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Предметы для специальностей" TO secretary;

REVOKE ALL ON TABLE public."Среднеобр. заведение" FROM PUBLIC;

REVOKE ALL ON TABLE public."Среднеобр. заведение" FROM postgres;

GRANT ALL ON TABLE public."Среднеобр. заведение" TO postgres;

GRANT SELECT ON TABLE public."Среднеобр. заведение" TO remote_user;

GRANT SELECT,INSERT,UPDATE ON TABLE public."Среднеобр. заведение" TO secretary;

Соседние файлы в предмете Базы данных