diff --git a/README.md b/README.md index cc4bf66..2cda855 100644 --- a/README.md +++ b/README.md @@ -1 +1,45 @@ -# Курсовая работа +# Курсовая работа по БД + +## Информационная система автомобилестроительного предприятия + +Структурно предприятие состоит из цехов, которые в свою очередь подразделяются на +участки. + +Категории изделий, выпускаемых предприятием: грузовые, легковые автомобили, +автобусы, сельскохозяйственные, дорожно-строительные машины, мотоциклы и прочие +изделия. Каждая категория изделий имеет специфические, присущие только ей атрибуты. +Например, для автобусов это вместимость, для сельскохозяйственных и дорожно-строительных +машин - производительность и т.д. + +По каждой категории изделий может собираться несколько видов изделий (под видом +изделия понимается конкретная его разновидность / марка - например, автомобиль KIA Rio). По +конкретным экземплярам каждого вида ведётся журнал, где отмечаются даты завершения +различных этапов жизненного цикла изделия: изготовление (сборка) / тестирование / передача +дилеру / гарантийный ремонт. + +Предприятие в основном состоит из производственных цехов, но также есть несколько +вспомогательных (например, ремонтный, тестировочный). + +Каждая категория изделий собирается в своём производственном цехе (в одном цехе +может собираться несколько категорий изделий). Цех структурно состоит из участков, на +каждом из которых выполняется один вид работ: изготавливается определённая часть изделия +(например, двигатель) либо производится сборка изделия в целом. С каждой категорией +изделия ассоциируется свой набор работ; другими словами, каждая категория в процессе +изготовления должна пройти определённый набор участков в цехе. + +Каждой категории инженерно-технического персонала (инженеры, технологи, техники) +и рабочих (сборщики, токари, слесари, сварщики и пр.) также характерны атрибуты, +свойственные только для этой группы. Рабочие объединяются в бригады, которыми руководят +бригадиры. Бригадиры выбираются из числа рабочих. Работу цеха возглавляет начальник цеха, +а работу на участке - начальник участка, в подчинении которого находится несколько мастеров. +Каждый мастер координирует работу одной или нескольких бригад (но, в отличие от +бригадира, не входит в состав конкретной бригады). Мастера, начальники участков и цехов +назначаются из числа инженерно-технического персонала. Каждый начальник может +руководить только одной структурной единицей (в т.ч. начальник одной структурной единицы +не может быть в то же время начальником другой). + +Работу по сборке конкретной категории изделия на определенном участке выполняет +одна бригада рабочих, при этом она может обслуживать несколько участков / категорий и на +одном участке может работать несколько бригад. + +[Отчет](https://github.com/olerom/db-coursework/releases). diff --git a/report/main.tex b/report/main.tex index 61b14a9..0ad4b7a 100644 --- a/report/main.tex +++ b/report/main.tex @@ -128,8 +128,8 @@ \subsection{Сущности, их харрактеристики и связи} Отчество\_сотрудника & VARCHAR2(16) & NO & NO & YES \\ \hline Тип\_сотрудника & VARCHAR2(1) & NO & NO & NO \\ \hline Дата\_рождения & DATE & NO & NO & YES \\ \hline - Код\_сотрудника & VARCHAR2(15) & NO & NO & NO \\ \hline - Должность\_сотрудника & VARCHAR2(8) & NO & NO & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & NO & NO & NO \\ \hline + Должность\_сотрудника & VARCHAR2(7) & NO & NO & NO \\ \hline \end{tabular} @@ -165,33 +165,22 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline + Должность\_ИТП & VARCHAR2(7) & NO & NO & NO \\ \hline \end{tabular} - \underline{Представитель инженерно-технического персонала} входит в какую-то категорию (\underline{инженер}, \underline{технолог} и \underline{техник}), что реализовано с помощью категориальной связи между соответствующими сущностями. + \underline{Представитель инженерно-технического персонала} входит в какую-то категорию (\underline{инженер}, \underline{техник}), что реализовано с помощью категориальной связи между соответствующими сущностями. + Должность\_ИТП является дискриминатором и принимет значения: инженер или техник. \underline{Руководитель} (участок, цех, мастер) выбирается из \underline{ИТП} (5), реализовано с помощью связи один-к-одному между соответствующими сущностями. - \item{Технолог} - - \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline - - {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline - Специализация\_технолога & VARCHAR2(12) & NO & NO & NO \\ \hline - - \end{tabular} - - Специализация\_технолога может принимать значения: исследования и практика (2). - Хранит информацию о специализации технолога: практик он или же исследователь. - \item{Техник} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Специализация\_техника & VARCHAR2(7) & NO & NO & NO \\ \hline \end{tabular} @@ -204,7 +193,7 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Специализация\_инженера & VARCHAR2(16) & NO & NO & NO \\ \hline \end{tabular} @@ -217,12 +206,14 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Номер\_бригады & NUMBER(3, 0) & NO & YES & YES \\ \hline + Должность\_рабочего & VARCHAR2(7) & NO & NO & NO \\ \hline \end{tabular} - \underline{Рабочий} входит в какую-то категорию (\underline{сборщик}, \underline{токарь}, \underline{слесарь} и \underline{сварщик}), что реализовано с помощью категориальной связи между соответствующими сущностями. + \underline{Рабочий} входит в какую-то категорию (\underline{сборщик}, \underline{токарь}, \underline{слесарь}), что реализовано с помощью категориальной связи между соответствующими сущностями. + Должность\_рабочего является дискриминатором и может принимать значения: сборщик, токарь или же слесарь. \underline{Рабочий} состоит в \underline{бригаде} (3), что и реализовани с помощью связи один-к-одному между соответствующими сущностями. Ключевая группа XIE1Рабочий: @@ -239,7 +230,7 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Специализация\_сборщика & VARCHAR2(9) & NO & NO & NO \\ \hline \end{tabular} @@ -252,7 +243,7 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Разряд\_токаря & NUMBER(1, 0) & NO & NO & NO \\ \hline \end{tabular} @@ -265,7 +256,7 @@ \subsection{Сущности, их харрактеристики и связи} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Разряд\_слесаря & NUMBER(1, 0) & NO & NO & NO \\ \hline \end{tabular} @@ -273,27 +264,14 @@ \subsection{Сущности, их харрактеристики и связи} Разряд\_слесаря может принимать целые значения от 1 до 6 (2). Хранит информацию о разряде слесаря: их бывает шесть. - \item{Сварщик} - - \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline - - {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline - Специализация\_сварщика & VARCHAR2(8) & NO & NO & NO \\ \hline - - \end{tabular} - - Специализация\_сварщика может принимать значения: подвеска и рама (2). - Хранит информацию о специализации сварщика: специалист в сварке подвески или же рамы. - \item{Руководитель} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline - Код\_сотрудника & VARCHAR2(15) & YES & YES & NO \\ \hline + Код\_сотрудника & VARCHAR2(14) & YES & YES & NO \\ \hline Ответственность & VARCHAR2(7) & NO & NO & NO \\ \hline - Код\_ответств & VARCHAR2(22) & NO & NO & NO \\ \hline + Код\_ответств & VARCHAR2(21) & NO & NO & NO \\ \hline \end{tabular} @@ -325,8 +303,8 @@ \subsection{Сущности, их харрактеристики и связи} {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline Номер\_бригады & NUMBER(3, 0) & YES & NO & NO \\ \hline Название\_бригады & VARCHAR2(14) & NO & NO & NO \\ \hline - Бригадир & VARCHAR2(15) & NO & YES & NO \\ \hline - Мастер & VARCHAR2(22) & NO & YES & NO \\ \hline + Бригадир & VARCHAR2(14) & NO & YES & NO \\ \hline + Мастер & VARCHAR2(21) & NO & YES & NO \\ \hline \end{tabular} @@ -363,15 +341,15 @@ \subsection{Сущности, их харрактеристики и связи} {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline Номер\_цеха & VARCHAR2(4) & YES & NO & NO \\ \hline - Начальник\_цеха & VARCHAR2(22) & NO & YES & NO \\ \hline + Начальник\_цеха & VARCHAR2(21) & NO & YES & NO \\ \hline Название\_цеха & VARCHAR2(14) & NO & NO & NO \\ \hline + Тип\_цеха & VARCHAR2(1) & NO & NO & NO \\ \hline \end{tabular} - Цех может быть либо производственным, либо вспомогательным, что и реализовано с помощью категориальной связи между соответствующими сущностями. - Цех структурно состоит из участков. - Для того, чтобы нельзя было записать цех и в вспомогательный, и в производственный, в каждом подтипе есть проверка, что номер цеха имеет префикс (П и В соответсвенно). - А сам номер проверяется на соответствие этим префиксам (детальнее в условиях проверки). + Для того, чтобы нельзя было записать цех и в вспомогательный, и в производственный, в каждом подтипе есть проверка, что номер цеха имеет Тип\_цеха (П и В соответсвенно). + Номер цеха состоит из: Тип\_цеха (П или В) и его номер (очевидно, уникален среди каждого подтипа цеха). + Тип\_цеха также является дискриминатором. Ключевая группа XAK2Цех: @@ -401,7 +379,7 @@ \subsection{Сущности, их харрактеристики и связи} \end{tabular} - Номер\_цеха должен иметь перфикс, соответствующий вспомогательному цеху. + Номер\_цеха должен иметь перфикс, соответствующий вспомогательному цеху (Тип\_цеха равен 'В'). Тип\_вспомогательного\_цеха содержит информацию о типе вспомогательного цеха. Например, ремонтный и тестировочный. @@ -411,12 +389,15 @@ \subsection{Сущности, их харрактеристики и связи} {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline Номер\_цеха & VARCHAR2(4) & YES & YES & NO \\ \hline - Колво\_сбор\_конв & NUMBER(2, 0) & NO & NO & NO \\ \hline + Спонсор\_производства & VARCHAR2(16) & NO & NO & YES \\ \hline \end{tabular} - Номер\_цеха должен иметь перфикс, соответствующий производственному цеху. - Колво\_сбор\_конв содержит положительное число, которое соответсвует количеству сборочных конвейеров на конкретном производственном цеху. + Номер\_цеха должен иметь перфикс, соответствующий производственному цеху (Тип\_цеха равен 'В'). + Производственная\_нагрузка сожержит информацию о том, сколько изделий способен произвести цех в день + + Спонсор\_производства содержит информацию о спонсоре, который поддерживает деньгами производство на производственном цеху. + Спонсора может не быть. \item{Участок} @@ -425,17 +406,18 @@ \subsection{Сущности, их харрактеристики и связи} {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline Номер\_цеха & VARCHAR2(4) & YES & YES & NO \\ \hline Номер\_участка & NUMBER(3, 0) & YES & NO & NO \\ \hline - Начальник\_участка & VARCHAR2(22) & NO & YES & NO \\ \hline + Начальник\_участка & VARCHAR2(21) & NO & YES & NO \\ \hline Тип\_участка & VARCHAR2(9) & NO & NO & NO \\ \hline Название\_участка & VARCHAR2(13) & NO & NO & NO \\ \hline Код\_участка & VARCHAR2(16) & NO & NO & NO \\ \hline \end{tabular} - В одном \underline{цеху} может быть несколько \underline{участков}, что и реализовано с помощью связи один-ко-многим между соответствующими сущностями. + В одном \underline{производственном цеху} может быть несколько \underline{участков}, что и реализовано с помощью связи один-ко-многим между соответствующими сущностями. У \underline{участка} может быть один \underline{начальник (руководитель)}, что и реализовано с помощью связи один-к-одному между соответствующими сущностями. На участке выполняется один вид работ: изготавливается определённая часть изделия (например, двигатель) либо производится сборка изделия в целом. Поэтому \underline{Участок} соединен категориальной связью с \underline{Изготовительный\_участок}. + Тип\_участка является дискриминатором. \begin{tabular}{|p{7cm}|p{9.3cm}|} \hline @@ -445,7 +427,7 @@ \subsection{Сущности, их харрактеристики и связи} Начальник\_участка & Уникален в пределах предприятия \\ \hline Тип\_участка & Может принимать значения: сборка и изготовка \\ \hline Название\_участка & Уникально в пределах предприятия \\ \hline - Код\_участка & Атрибут, созданный для связи с \underline{Работой} и \underline{Изготовительный\_участок}. Состоит из: Номер\_цеха, Тип\_участка и Номер\_участка \\ \hline + Код\_участка & Атрибут, созданный для связи с \underline{Сборочный\_участок} и \underline{Изготовительный\_участок}. Состоит из: Номер\_цеха, Тип\_участка и Номер\_участка \\ \hline \end{tabular} @@ -489,6 +471,62 @@ \subsection{Сущности, их харрактеристики и связи} Чтобы нельзя было записать участок, на котором происходит сборка изделия, имеется проверка на соответствие по коду участка. Часть\_изделия хранит информацию о части изделия, которую изготавливают на этом участке. + \item{Сборочный\_участок} + + \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline + + {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline + Код\_участка & VARCHAR2(16) & YES & YES & NO \\ \hline + Колво\_сбор\_конв & NUMBER(2, 0) & NO & NO & NO \\ \hline + + \end{tabular} + + Чтобы нельзя было записать участок, на котором происходит изготовка изделия, имеется проверка на соответствие по коду участка. + В данном подтипе находятся участки, а которых происходит сборка категории. + Колво\_сбор\_конв содержит информацию о количестве сбороных конвееров, которые расположены на этом участке. + + С помощью связи один-ко-многим \underline{Сборочный\_участок} соединен с \underline{Сборка\_изделия}. + + \item{Сборка} + + \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline + + {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline + Категорский\_цех & VARCHAR2(13) & YES & YES & NO \\ \hline + Код\_участка & VARCHAR2(16) & NO & YES & NO \\ \hline + Номер\_бригады & NUMBER(3, 0) & NO & YES & NO \\ \hline + + \end{tabular} + + Работу по сборке конкретной категории изделия на определенном участке выполняет одна бригада рабочих, при этом она может обслуживать несколько участков / категорий и на одном участке может работать несколько бригад. + Изделие можно собрать один раз, поэтому Категорский\_цех является первичным ключом (производится сборка изделия в целом на сборочном участке). + Также проверяется, можно ли записать конкретный участок для конкретной категории (возможно, этот участок находится в другом цеху). + Соответствие проверяет в равенстве частей специальных атрибутов Категорский\_цех и Код\_участка. + + Основная задача, оебспечить условие, которое гласит, что сборка изделия производится в целом. + + Сущность соединена с \underline{Категория\_изделия} связью один-к-одному, так как категорию можно собрать только один раз. + Сущность соединена с \underline{Сборочный\_участок} так как на одном участке могут работать несколько бригад. + Сущность соединена с \underline{Бригада} связью один-ко-многим, бригада может собирать несколько изделий. + + Ключевая группа XIE1Сборка: + + \begin{tabular}{|p{7cm}|p{9.3cm}|} \hline + + {\bf Имя атрибута} & {\bf Примечание} \\ \hline + Код\_участка & Индекс для FK \\ \hline + + \end{tabular} + + Ключевая группа XIE2Сборка + + \begin{tabular}{|p{7cm}|p{9.3cm}|} \hline + + {\bf Имя атрибута} & {\bf Примечание} \\ \hline + Номер\_бригады & Индекс для FK \\ \hline + + \end{tabular} + \item{Категория\_изделия} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline @@ -539,6 +577,7 @@ \subsection{Сущности, их харрактеристики и связи} \underline{Вид\_изделия} связана категориальной связью с \underline{Мотоциклы}, \underline{Автобусы}, \underline{Грузовые\_автомобили}. \underline{Вид\_изделия} связана связью один-ко-многим с \underline{Категория\_изделия}. По каждой \underline{категории изделий} может собираться несколько \underline{видов изделий}. + Тип\_категории также является дискриминатором. Благодаря этому мы сможем создать вид изделия, который будет в какой-то категории изделия (например, мотоцикл). А также можем записать харрактеристики этого мотоцикла (благодаря категориальной связи). @@ -567,8 +606,6 @@ \subsection{Сущности, их харрактеристики и связи} \item{Мотоциклы} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline - - {\bf COLUMN\_NAME} & {\bf DATA\_TYPE} & {\bf PK} & {\bf FK} & {\bf NULLABLE} \\ \hline Код\_вида & VARCHAR2(12) & YES & YES & NO \\ \hline Колво\_тактов\_мотора & NUMBER(1, 0) & NO & NO & NO \\ \hline @@ -606,7 +643,7 @@ \subsection{Сущности, их харрактеристики и связи} Из-за этого мы не сможем добавить вид изделия сразу и в грузовые, и в автобусы. Грузоподъемность содержит информацию о грузоподъемности грузового автомобиля в килограммах. - \item{Работы} + \item{Изготовка} \begin{tabular}{|p{7cm}|p{3cm}|p{1cm}|p{1cm}|p{3cm}|} \hline @@ -620,15 +657,22 @@ \subsection{Сущности, их харрактеристики и связи} С каждой категорией изделия ассоциируется свой набор работ; другими словами, каждая категория в процессе изготовления должна пройти определённый набор участков в цехе. + Поэтому в данном случае можно определить перечень работ, которые должна пройти категория в процессе изготовления. + И известно, на каких участках и с какими категориями работает бригада. + Одна \underline{бригада} рабочих работает на определенном участке с \underline{конкретной категорией изделия}, что и реализован с помощью связи один-ко-многим между соответсвующими сущностями. Так, можно понять, на каких участках работает бригада (и с какими категориями изделий). Каждая категория должна пройти определённый набор участков в цехе. - Так, имеются связи один-ко-многим между \underline{Работы} и \underline{Участок}, а также \underline{Работы} и \underline{Тип\_категории}. + Так, имеются связи один-ко-многим между \underline{Изготовительный участок} и \underline{Участок}, а также \underline{Изготовительный участок} и \underline{Тип\_категории}. В свою очередь проверяем соответствие цехов между Код\_участка и Категорский\_цех. - Ключевая группа XIE3Работы: + А также выбранный первичный ключ (Код\_участка и Категорский\_цех) позволяет обеспечить условие, что работу по сборке на конкретном участке производит одна бригада рабочих. + К тому же, она может обслуживать несколько участков / категорий и на одном участке может работать несколько бригад (но с другой категорией, так как с этой уже работает бригада). + Т.е. каждая бригада может работать с несколькими категориями на участке, но каждой категорией на этом участке занимается только одна бригада. + + Ключевая группа XIE3Изготовка: \begin{tabular}{|p{7cm}|p{9.3cm}|} \hline @@ -637,7 +681,7 @@ \subsection{Сущности, их харрактеристики и связи} \end{tabular} - Ключевая группа XIE4Работы: + Ключевая группа XIE4Изготовка: \begin{tabular}{|p{7cm}|p{9.3cm}|} \hline @@ -724,12 +768,14 @@ \subsection{Сущности, их харрактеристики и связи} Все неключевые атрибуты не зависят от номера участка, так как могут быть участки в разных цехах. \item Работы. - Бригада не зависит от кода участка, так как на одном участке могут работать несколько бригад. - Бригада не зависит от категории изделия, так как категория собирается на нескольких участках (должна пройти набор участков). + Изготовку разных деталей для категории могут выполнять разные бригады. + На участке могу работать несколько бригад. \item Журнал. Конец не завист ни от начала, ни от номера экземпляра. - Этап жизненного цикла также не зависит от ни от начала, ни от конкретного экземпляра. + Так у разных экзмепляров может начаться этап жизненного цикла, а закончится не в одно и то же время. + У экземпляра может быть несколько этапов жизенного цикла, соответственно они закончатся в разное время. + Этап жизненного цикла также не зависит от ни от начала, ни от конкретного экземпляра (очевидно). \end{itemize} @@ -742,8 +788,14 @@ \subsection{Сущности, их харрактеристики и связи} \begin{itemize} - \item Сотрудник. Все неключевые атрибуты взаимонезависимы. - \item Журнал. Все неключевые атрибуты взаимонезависимы. + \item Сотрудник. + Все неключевые атрибуты взаимонезависимы. + \item Журнал. + Все неключевые атрибуты взаимонезависимы. + Этап не зависит от окончания этого этапа, точно также этап не зависит от окончания этапа. + \item Рабочий. + Должность не зависит от номера бригады, точно также номер бригады не зависит от должности рабочего. + \item Сборка\_изделия. Бригада не зависит от участка и участок не зависит от бригады. \end{itemize} @@ -780,7 +832,7 @@ \subsection{Условия проверки и значения по умолч \includegraphics[width=17cm]{./screenshots/constraints/employee1.png} - \item Должность\_сотрудника IN ('Сборщик', 'Токарь', 'Слесарь', 'Сварщик', 'Технолог', 'Техник', 'Инженер'). + \item Должность\_сотрудника IN ('Сборщик', 'Токарь', 'Слесарь', 'Техник', 'Инженер'). Должности сотурдника на предприятии. \item Тип\_сотрудника || Должность\_сотрудника || Номер\_договора = Код\_сотрудника. @@ -802,7 +854,7 @@ \subsection{Условия проверки и значения по умолч \item SUBSTR(Код\_сотрудника, 2, 7) = 'Сборщик'. Так мы не сможем записать сразу в несколько категорий одного рабочего. - Дальше аналогично для: токаря, слесаря, сварщика. + Дальше аналогично для: токаря, слесаря. \item Разряд\_токаря BETWEEN 1 AND 7. Возможные разряды токаря. @@ -815,11 +867,10 @@ \subsection{Условия проверки и значения по умолч \item SUBSTR(Код\_сотрудника, 2, 7) = 'Инженер'. Так мы не сможем записать сразу в несколько категорий одного представителя ИТП. - Дальше аналогично для: техников и технологов. + Дальше аналогично для техников. \item Специализация\_инженера IN ('проектирование', 'прототипирование'). Специализация\_техника IN ('схемы', 'чертежи'). - Специализация\_технолога IN ('исследования', 'практика'). В чем хороши конкретные преставители ИТП. \item Ответственность || Код\_сотрудника = Код\_ответств. @@ -876,32 +927,16 @@ \section{Реализация запросов к базе данных} \item Перечень видов изделий по категории, собираемой указанным цехом. В последней строке вывести общее число собираемых видов изделий. - Если вводят только цех через подстановочную переменную: + \lstinputlisting[language=SQL]{../sources/queries/task1.sql} - \lstinputlisting[language=SQL]{../sources/queries/task1a.sql} - - \includegraphics[width=16cm]{./screenshots/results/result1a.png} - - Если вводят цех и категорию через подстановочную переменную: - - \lstinputlisting[language=SQL]{../sources/queries/task1b.sql} - - \includegraphics[width=16cm]{./screenshots/results/result1b.png} + \includegraphics[width=16cm]{./screenshots/results/result1.png} \item Количество экземпляров изделий каждого вида каждой категории, собранных предприятием за определенный отрезок времени. В последней строке вывести общее число собранных изделий. - Если считать, что изделие собрано за отрезок времени: начало сборки больше начала отрезка и конец сборки меньше конца отрезка. - - \lstinputlisting[language=SQL]{../sources/queries/task2a.sql} - - \includegraphics[width=16cm]{./screenshots/results/result2a.png} - - Если считать, что изделие собрано за отрезок времени: конца сборки больше начала отрезка и конец сборки меньше конца отрезка. - - \lstinputlisting[language=SQL]{../sources/queries/task2b.sql} + \lstinputlisting[language=SQL]{../sources/queries/task2.sql} - \includegraphics[width=16cm]{./screenshots/results/result2b.png} + \includegraphics[width=16cm]{./screenshots/results/result2.png} \item Данные о кадровом составе (ФИО, должность) по указанным категориям инженерно-технического персонала и рабочих; diff --git a/report/screenshots/model/logical.png b/report/screenshots/model/logical.png index de781c6..fb1d25f 100644 Binary files a/report/screenshots/model/logical.png and b/report/screenshots/model/logical.png differ diff --git a/report/screenshots/model/physical.png b/report/screenshots/model/physical.png index 68e52b6..76a776a 100644 Binary files a/report/screenshots/model/physical.png and b/report/screenshots/model/physical.png differ diff --git a/report/screenshots/model/reverse.jpg b/report/screenshots/model/reverse.jpg index 3a3abe6..8e2f165 100644 Binary files a/report/screenshots/model/reverse.jpg and b/report/screenshots/model/reverse.jpg differ diff --git a/report/screenshots/results/result1.png b/report/screenshots/results/result1.png new file mode 100644 index 0000000..36343bf Binary files /dev/null and b/report/screenshots/results/result1.png differ diff --git a/report/screenshots/results/result10.png b/report/screenshots/results/result10.png index 3a94323..3077eb3 100644 Binary files a/report/screenshots/results/result10.png and b/report/screenshots/results/result10.png differ diff --git a/report/screenshots/results/result1a.png b/report/screenshots/results/result1a.png deleted file mode 100644 index dcdd528..0000000 Binary files a/report/screenshots/results/result1a.png and /dev/null differ diff --git a/report/screenshots/results/result1b.png b/report/screenshots/results/result1b.png deleted file mode 100644 index 903828c..0000000 Binary files a/report/screenshots/results/result1b.png and /dev/null differ diff --git a/report/screenshots/results/result2.png b/report/screenshots/results/result2.png new file mode 100644 index 0000000..0dd026d Binary files /dev/null and b/report/screenshots/results/result2.png differ diff --git a/report/screenshots/results/result2a.png b/report/screenshots/results/result2a.png deleted file mode 100644 index 6004f96..0000000 Binary files a/report/screenshots/results/result2a.png and /dev/null differ diff --git a/report/screenshots/results/result2b.png b/report/screenshots/results/result2b.png deleted file mode 100644 index c46247a..0000000 Binary files a/report/screenshots/results/result2b.png and /dev/null differ diff --git a/report/screenshots/results/result3.png b/report/screenshots/results/result3.png index e33bfe1..e277f26 100644 Binary files a/report/screenshots/results/result3.png and b/report/screenshots/results/result3.png differ diff --git a/report/screenshots/results/result4.png b/report/screenshots/results/result4.png index f001e67..fb4330a 100644 Binary files a/report/screenshots/results/result4.png and b/report/screenshots/results/result4.png differ diff --git a/report/screenshots/results/result5.png b/report/screenshots/results/result5.png index 3c3375f..e119e89 100644 Binary files a/report/screenshots/results/result5.png and b/report/screenshots/results/result5.png differ diff --git a/report/screenshots/results/result6.png b/report/screenshots/results/result6.png index 68d45be..9b67222 100644 Binary files a/report/screenshots/results/result6.png and b/report/screenshots/results/result6.png differ diff --git a/report/screenshots/results/result7.png b/report/screenshots/results/result7.png index 0c13909..1622a66 100644 Binary files a/report/screenshots/results/result7.png and b/report/screenshots/results/result7.png differ diff --git a/report/screenshots/results/result8.png b/report/screenshots/results/result8.png index f3dfac8..1ea0cf2 100644 Binary files a/report/screenshots/results/result8.png and b/report/screenshots/results/result8.png differ diff --git a/report/screenshots/results/result9.png b/report/screenshots/results/result9.png index 0565cef..e228456 100644 Binary files a/report/screenshots/results/result9.png and b/report/screenshots/results/result9.png differ diff --git a/report/screenshots/view/result.png b/report/screenshots/view/result.png index da82915..91996d4 100644 Binary files a/report/screenshots/view/result.png and b/report/screenshots/view/result.png differ diff --git a/sources/coursework.erwin b/sources/coursework.erwin index a962d15..fec6631 100644 Binary files a/sources/coursework.erwin and b/sources/coursework.erwin differ diff --git a/sources/coursework.exp b/sources/coursework.exp index 2f719d3..6f2d2b7 100644 Binary files a/sources/coursework.exp and b/sources/coursework.exp differ diff --git a/sources/coursework.ddl b/sources/coursework.sql similarity index 79% rename from sources/coursework.ddl rename to sources/coursework.sql index e59c7b2..ac5e049 100644 --- a/sources/coursework.ddl +++ b/sources/coursework.sql @@ -1,7 +1,5 @@ DROP TABLE CWИнженер CASCADE CONSTRAINTS PURGE; -DROP TABLE CWТехнолог CASCADE CONSTRAINTS PURGE; - DROP TABLE CWТехник CASCADE CONSTRAINTS PURGE; DROP TABLE CWСборщик CASCADE CONSTRAINTS PURGE; @@ -10,8 +8,6 @@ DROP TABLE CWТокарь CASCADE CONSTRAINTS PURGE; DROP TABLE CWСлесарь CASCADE CONSTRAINTS PURGE; -DROP TABLE CWСварщик CASCADE CONSTRAINTS PURGE; - DROP TABLE CWВспомогательный_цех CASCADE CONSTRAINTS PURGE; DROP TABLE CWМотоциклы CASCADE CONSTRAINTS PURGE; @@ -20,11 +16,9 @@ DROP TABLE CWАвтобусы CASCADE CONSTRAINTS PURGE; DROP TABLE CWГрузовые_автомобили CASCADE CONSTRAINTS PURGE; -DROP TABLE CWРаботы CASCADE CONSTRAINTS PURGE; - -DROP TABLE CWРабочий CASCADE CONSTRAINTS PURGE; +DROP TABLE CWИзготовка CASCADE CONSTRAINTS PURGE; -DROP TABLE CWБригада CASCADE CONSTRAINTS PURGE; +DROP TABLE CWИзготовительный_участок CASCADE CONSTRAINTS PURGE; DROP TABLE CWЖурнал CASCADE CONSTRAINTS PURGE; @@ -32,16 +26,22 @@ DROP TABLE CWЭкземпляр_изделия CASCADE CONSTRAINTS PURGE; DROP TABLE CWВид_изделия CASCADE CONSTRAINTS PURGE; -DROP TABLE CWКатегория_изделия CASCADE CONSTRAINTS PURGE; +DROP VIEW Представление CASCADE CONSTRAINTS; -DROP TABLE CWПроизводственный_цех CASCADE CONSTRAINTS PURGE; +DROP TABLE CWCборка CASCADE CONSTRAINTS PURGE; -DROP VIEW Представление CASCADE CONSTRAINTS; +DROP TABLE CWРабочий CASCADE CONSTRAINTS PURGE; -DROP TABLE CWИзготовительный_участок CASCADE CONSTRAINTS PURGE; +DROP TABLE CWБригада CASCADE CONSTRAINTS PURGE; + +DROP TABLE CWСборочный_участок CASCADE CONSTRAINTS PURGE; DROP TABLE CWУчасток CASCADE CONSTRAINTS PURGE; +DROP TABLE CWКатегория_изделия CASCADE CONSTRAINTS PURGE; + +DROP TABLE CWПроизводственный_цех CASCADE CONSTRAINTS PURGE; + DROP TABLE CWЦех CASCADE CONSTRAINTS PURGE; DROP TABLE CWРуководитель CASCADE CONSTRAINTS PURGE; @@ -50,6 +50,31 @@ DROP TABLE CWИТП CASCADE CONSTRAINTS PURGE; DROP TABLE CWСотрудник CASCADE CONSTRAINTS PURGE; +CREATE TABLE CWCборка +( + Код_участка VARCHAR2(16) NOT NULL, + Номер_бригады NUMBER(3, 0) NOT NULL, + Категорский_цех VARCHAR2(13) NOT NULL +); + +CREATE UNIQUE INDEX XPKCборка_изделия + ON CWCборка + (Категорский_цех ASC); + +ALTER TABLE CWCборка + ADD CONSTRAINT XPKCборка_изделия PRIMARY KEY (Категорский_цех); + +ALTER TABLE CWCборка + ADD CONSTRAINT Работы_соотв_451714171 CHECK (SUBSTR(Код_участка, 1, 4) = SUBSTR(Категорский_цех, 1, 4)); + +CREATE INDEX XIE1Cборка_изделия + ON CWCборка + (Код_участка ASC); + +CREATE INDEX XIE2Cборка_изделия + ON CWCборка + (Номер_бригады ASC); + CREATE TABLE CWАвтобусы ( Вместимость NUMBER(4, 0) NOT NULL, @@ -73,8 +98,8 @@ CREATE TABLE CWБригада ( Номер_бригады NUMBER(3, 0) NOT NULL, Название_бригады VARCHAR2(14) NOT NULL, - Бригадир VARCHAR2(15) NOT NULL, - Мастер VARCHAR2(22) NOT NULL + Бригадир VARCHAR2(14) NOT NULL, + Мастер VARCHAR2(21) NOT NULL ); CREATE UNIQUE INDEX XPKБригада @@ -127,6 +152,13 @@ CREATE UNIQUE INDEX XAK2Категория_изделия ALTER TABLE CWВид_изделия ADD CONSTRAINT XAK2Категория_изделия UNIQUE (Код_вида); +CREATE UNIQUE INDEX XAK3Категория_изделия + ON CWВид_изделия + (Название_вида_изделия ASC); + +ALTER TABLE CWВид_изделия + ADD CONSTRAINT XAK3Категория_изделия UNIQUE (Название_вида_изделия); + ALTER TABLE CWВид_изделия ADD CONSTRAINT Кат_изд_соотв_1333772069 CHECK (Тип_категории || Номер_вида_изделия = Код_вида); @@ -155,12 +187,6 @@ ALTER TABLE CWВспомогательный_цех MODIFY Тип_вспомогательного_цеха CONSTRAINT Вспомогат_цех_1656618676 CHECK (Тип_вспомогательного_цеха IN ('ремонтный', 'тестировочный')); -ALTER TABLE CWВспомогательный_цех - MODIFY Номер_цеха CONSTRAINT Номер_цеха_478363869 CHECK ((SUBSTR(Номер_цеха, 1, 1) = 'П' - OR SUBSTR(Номер_цеха, 1, 1) = 'В') - AND LENGTH(Номер_цеха) = 4 -); - CREATE TABLE CWГрузовые_автомобили ( Грузоподъемность NUMBER(5, 0) NOT NULL, @@ -208,7 +234,8 @@ CREATE INDEX XIE1Журнал CREATE TABLE CWИТП ( - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL, + Должность_ИТП VARCHAR2(7) NOT NULL ); CREATE UNIQUE INDEX XPKИТП @@ -219,7 +246,8 @@ ALTER TABLE CWИТП ADD CONSTRAINT XPKИТП PRIMARY KEY (Код_сотрудника); ALTER TABLE CWИТП - ADD CONSTRAINT ИТП_соотв_1970182668 CHECK (SUBSTR(Код_сотрудника, 1, 1) = 'И'); + ADD CONSTRAINT ИТП_соотв_1970182668 CHECK (SUBSTR(Код_сотрудника, 1, 1) = 'И' + AND SUBSTR(Код_сотрудника, 2, LENGTH(Должность_ИТП)) = Должность_ИТП); CREATE TABLE CWИзготовительный_участок ( @@ -227,20 +255,48 @@ CREATE TABLE CWИзготовительный_участок Часть_изделия VARCHAR2(16) NOT NULL ); -CREATE UNIQUE INDEX XPKСборка +CREATE UNIQUE INDEX XPKИзготовительный_участок ON CWИзготовительный_участок (Код_участка ASC); ALTER TABLE CWИзготовительный_участок - ADD CONSTRAINT XPKСборка PRIMARY KEY (Код_участка); + ADD CONSTRAINT XPKИзготовительный_участок PRIMARY KEY (Код_участка); ALTER TABLE CWИзготовительный_участок - ADD CONSTRAINT Сборка_участок_528276976 CHECK (SUBSTR(Код_участка, 5, 9) = 'изготовка'); + ADD CONSTRAINT Изготов_участок_333364944 CHECK (SUBSTR(Код_участка, 5, 9) = 'изготовка'); + +ALTER TABLE CWИзготовительный_участок + MODIFY Код_участка CONSTRAINT Изготов_участок_2036339226 CHECK (SUBSTR(Код_участка, 5, 9) = 'изготовка'); + +CREATE TABLE CWИзготовка +( + Категорский_цех VARCHAR2(13) NOT NULL, + Код_участка VARCHAR2(16) NOT NULL, + Номер_бригады NUMBER(3, 0) NOT NULL +); + +CREATE UNIQUE INDEX XPKРаботы + ON CWИзготовка + (Категорский_цех ASC, Код_участка ASC); + +ALTER TABLE CWИзготовка + ADD CONSTRAINT XPKРаботы PRIMARY KEY (Категорский_цех, Код_участка); + +ALTER TABLE CWИзготовка + ADD CONSTRAINT Работы_соотв_1982503329 CHECK (SUBSTR(Код_участка, 1, 4) = SUBSTR(Категорский_цех, 1, 4)); + +CREATE INDEX XIE1Работы + ON CWИзготовка + (Код_участка ASC); + +CREATE INDEX XIE2Работы + ON CWИзготовка + (Номер_бригады ASC); CREATE TABLE CWИнженер ( Специализация_инженера VARCHAR2(16) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL ); CREATE UNIQUE INDEX XPKИнженер @@ -311,7 +367,7 @@ ALTER TABLE CWМотоциклы CREATE TABLE CWПроизводственный_цех ( Номер_цеха VARCHAR2(4) NOT NULL, - Количество_сбор_конв NUMBER(2, 0) NOT NULL + Спонсор_производства VARCHAR2(16) NULL ); CREATE UNIQUE INDEX XPKПроизводственный_цех @@ -325,44 +381,11 @@ ALTER TABLE CWПроизводственный_цех ADD CONSTRAINT Производств_соотв_1637157749 CHECK (SUBSTR(Номер_цеха, 1, 1) = 'П' ); -ALTER TABLE CWПроизводственный_цех - MODIFY Номер_цеха CONSTRAINT Номер_цеха_1884848667 CHECK ((SUBSTR(Номер_цеха, 1, 1) = 'П' - OR SUBSTR(Номер_цеха, 1, 1) = 'В') - AND LENGTH(Номер_цеха) = 4 -); - -ALTER TABLE CWПроизводственный_цех - MODIFY Количество_сбор_конв CONSTRAINT Колво_сбор_конв_1425966559 CHECK (Количество_сбор_конв >= 0); - -CREATE TABLE CWРаботы -( - Номер_бригады NUMBER(3, 0) NOT NULL, - Категорский_цех VARCHAR2(13) NOT NULL, - Код_участка VARCHAR2(16) NOT NULL -); - -CREATE UNIQUE INDEX XPKРаботы - ON CWРаботы - (Код_участка ASC, Категорский_цех ASC); - -ALTER TABLE CWРаботы - ADD CONSTRAINT XPKРаботы PRIMARY KEY (Код_участка, Категорский_цех); - -ALTER TABLE CWРаботы - ADD CONSTRAINT Работы_соотв_669910881 CHECK (SUBSTR(Код_участка, 1, 4) = SUBSTR(Категорский_цех, 1, 4)); - -CREATE INDEX XIE3Работы - ON CWРаботы - (Номер_бригады ASC); - -CREATE INDEX XIE4Работы - ON CWРаботы - (Категорский_цех ASC); - CREATE TABLE CWРабочий ( - Номер_бригады NUMBER(3, 0) NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Номер_бригады NUMBER(3, 0) NULL, + Код_сотрудника VARCHAR2(14) NOT NULL, + Должность_рабочего VARCHAR2(7) NOT NULL ); CREATE UNIQUE INDEX XPKРабочий @@ -373,7 +396,9 @@ ALTER TABLE CWРабочий ADD CONSTRAINT XPKРабочий PRIMARY KEY (Код_сотрудника); ALTER TABLE CWРабочий - ADD CONSTRAINT Рабочий_соотв_2122034973 CHECK (SUBSTR(Код_сотрудника, 1, 1) = 'Р'); + ADD CONSTRAINT Рабочий_соотв_2122034973 CHECK (SUBSTR(Код_сотрудника, 1, 1) = 'Р' + AND SUBSTR(Код_сотрудника, 2, LENGTH(Должность_рабочего)) = + Должность_рабочего); ALTER TABLE CWРабочий MODIFY Номер_бригады CONSTRAINT Номер_бригады_1401248355 CHECK (Номер_бригады >= 1); @@ -384,9 +409,9 @@ CREATE INDEX XIE1Рабочий CREATE TABLE CWРуководитель ( - Код_сотрудника VARCHAR2(15) NOT NULL, + Код_сотрудника VARCHAR2(14) NOT NULL, Ответственность VARCHAR2(7) NOT NULL, - Код_ответств VARCHAR2(22) NOT NULL + Код_ответств VARCHAR2(21) NOT NULL ); CREATE UNIQUE INDEX XPKРуководитель @@ -409,10 +434,32 @@ ALTER TABLE CWРуководитель ALTER TABLE CWРуководитель MODIFY Ответственность CONSTRAINT Руковолитель_отвественность CHECK (Ответственность IN ('Участок', 'Цех', 'Мастер')); +CREATE TABLE CWСборочный_участок +( + Код_участка VARCHAR2(16) NOT NULL, + Колво_сбор_конв NUMBER(2, 0) NOT NULL +); + +CREATE UNIQUE INDEX XPKСборочный_участок + ON CWСборочный_участок + (Код_участка ASC); + +ALTER TABLE CWСборочный_участок + ADD CONSTRAINT XPKСборочный_участок PRIMARY KEY (Код_участка); + +ALTER TABLE CWСборочный_участок + ADD CONSTRAINT Сборочн_соотв_805914176 CHECK (SUBSTR(Код_участка, 5, 6) = 'сборка'); + +ALTER TABLE CWСборочный_участок + MODIFY Код_участка CONSTRAINT Сборочн_соотв_1499196068 CHECK (SUBSTR(Код_участка, 5, 6) = 'сборка'); + +ALTER TABLE CWСборочный_участок + MODIFY Колво_сбор_конв CONSTRAINT Полож_1306510629 CHECK (Колво_сбор_конв >= 0); + CREATE TABLE CWСборщик ( Специализация_сборщика VARCHAR2(9) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL ); CREATE UNIQUE INDEX XPKСбощик @@ -429,27 +476,10 @@ ALTER TABLE CWСборщик MODIFY Специализация_сборщика CONSTRAINT Сбрщик_спец_1691720949 CHECK (Специализация_сборщика IN ('двигатель', 'подвеска', 'кузов')); -CREATE TABLE CWСварщик -( - Специализвация_сварщика VARCHAR2(8) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL -); - -CREATE UNIQUE INDEX XPKСварщик - ON CWСварщик - (Код_сотрудника ASC); - -ALTER TABLE CWСварщик - ADD CONSTRAINT XPKСварщик PRIMARY KEY (Код_сотрудника); - -ALTER TABLE CWСварщик - MODIFY Специализвация_сварщика CONSTRAINT Сварщик_спец_1889797129 CHECK (Специализвация_сварщика IN - ('подвеска', 'рама')); - CREATE TABLE CWСлесарь ( Разряд_слесаря NUMBER(1, 0) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL ); CREATE UNIQUE INDEX XPKСлесарь @@ -473,8 +503,8 @@ CREATE TABLE CWСотрудник Отчество_сотрудника VARCHAR2(16) NULL, Тип_сотрудника VARCHAR2(1) NOT NULL, Дата_рождения DATE NULL, - Код_сотрудника VARCHAR2(15) NOT NULL, - Должность_сотрудника VARCHAR2(8) NULL + Код_сотрудника VARCHAR2(14) NOT NULL, + Должность_сотрудника VARCHAR2(7) NULL ); CREATE UNIQUE INDEX XPKСотрудник @@ -500,7 +530,7 @@ ALTER TABLE CWСотрудник ALTER TABLE CWСотрудник MODIFY Должность_сотрудника CONSTRAINT Должность_сотрудника_195850548 CHECK (Должность_сотрудника IN - ('Сборщик', 'Токарь', 'Слесарь', 'Сварщик', 'Технолог', 'Техник', 'Инженер')); + ('Сборщик', 'Токарь', 'Слесарь', 'Техник', 'Инженер')); ALTER TABLE CWСотрудник MODIFY Отчество_сотрудника DEFAULT 'Нет отчества'; @@ -508,7 +538,7 @@ ALTER TABLE CWСотрудник CREATE TABLE CWТехник ( Специализация_техника VARCHAR2(7) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL ); CREATE UNIQUE INDEX XPKТехник @@ -525,30 +555,10 @@ ALTER TABLE CWТехник MODIFY Специализация_техника CONSTRAINT Специализация_техни_1611615165 CHECK (Специализация_техника IN ('схемы', 'чертежи')); -CREATE TABLE CWТехнолог -( - Специализация_технолога VARCHAR2(12) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL -); - -CREATE UNIQUE INDEX XPKТехнолог - ON CWТехнолог - (Код_сотрудника ASC); - -ALTER TABLE CWТехнолог - ADD CONSTRAINT XPKТехнолог PRIMARY KEY (Код_сотрудника); - -ALTER TABLE CWТехнолог - ADD CONSTRAINT Технолог_соотв_68561289 CHECK (SUBSTR(Код_сотрудника, 2, 8) = 'Технолог'); - -ALTER TABLE CWТехнолог - MODIFY Специализация_технолога CONSTRAINT Технолог_спец_210397916 CHECK (Специализация_технолога IN - ('исследования', 'практика')); - CREATE TABLE CWТокарь ( Разряд_токаря NUMBER(1, 0) NOT NULL, - Код_сотрудника VARCHAR2(15) NOT NULL + Код_сотрудника VARCHAR2(14) NOT NULL ); CREATE UNIQUE INDEX XPKТокарь @@ -566,20 +576,20 @@ ALTER TABLE CWТокарь CREATE TABLE CWУчасток ( - Номер_цеха VARCHAR2(4) NOT NULL, Номер_участка NUMBER(3, 0) NOT NULL, - Начальник_участка VARCHAR2(22) NOT NULL, + Начальник_участка VARCHAR2(21) NOT NULL, Тип_участка VARCHAR2(9) NOT NULL, Название_участка VARCHAR2(13) NOT NULL, - Код_участка VARCHAR2(16) NOT NULL + Код_участка VARCHAR2(16) NOT NULL, + Номер_цеха VARCHAR2(4) NOT NULL ); CREATE UNIQUE INDEX XPKУчасток ON CWУчасток - (Номер_цеха ASC, Номер_участка ASC); + (Номер_участка ASC, Номер_цеха ASC); ALTER TABLE CWУчасток - ADD CONSTRAINT XPKУчасток PRIMARY KEY (Номер_цеха, Номер_участка); + ADD CONSTRAINT XPKУчасток PRIMARY KEY (Номер_участка, Номер_цеха); CREATE UNIQUE INDEX XAK1Участок ON CWУчасток @@ -611,11 +621,16 @@ ALTER TABLE CWУчасток ALTER TABLE CWУчасток MODIFY Тип_участка CONSTRAINT Тип_участка_367341758 CHECK (Тип_участка IN ('сборка', 'изготовка')); +CREATE INDEX XIE1Участок + ON CWУчасток + (Номер_цеха ASC); + CREATE TABLE CWЦех ( Номер_цеха VARCHAR2(4) NOT NULL, - Начальник_цеха VARCHAR2(22) NOT NULL, - Название_цеха VARCHAR2(14) NOT NULL + Начальник_цеха VARCHAR2(21) NOT NULL, + Название_цеха VARCHAR2(14) NOT NULL, + Тип_цеха VARCHAR2(1) NOT NULL ); CREATE UNIQUE INDEX XPKЦех @@ -646,6 +661,7 @@ ALTER TABLE CWЦех ADD CONSTRAINT Номер_цеха_905638907 CHECK ((SUBSTR(Номер_цеха, 1, 1) = 'П' OR SUBSTR(Номер_цеха, 1, 1) = 'В') AND LENGTH(Номер_цеха) = 4 + AND SUBSTR(Номер_цеха, 1, 1) = Тип_цеха ); CREATE TABLE CWЭкземпляр_изделия @@ -661,16 +677,19 @@ CREATE UNIQUE INDEX XPKЭкземпляр_изделия ALTER TABLE CWЭкземпляр_изделия ADD CONSTRAINT XPKЭкземпляр_изделия PRIMARY KEY (Номер_экземпляра); +ALTER TABLE CWЭкземпляр_изделия + MODIFY Номер_экземпляра CONSTRAINT Полож_264450153 CHECK (Номер_экземпляра >= 0); + CREATE INDEX XIE1Экземпляр_изделия ON CWЭкземпляр_изделия (Номер_вида_изделия ASC); -CREATE VIEW Представление ( Количество_участков, Номер_участка, Номер_цеха, Название_участка, Тип_участка, Фамилия_начальника, Имя_начальника, Отчество_начальника ) +CREATE VIEW Представление ( Количество_участков, Номер_цеха, Номер_участка, Название_участка, Тип_участка, Фамилия_начальника, Имя_начальника, Отчество_начальника ) AS SELECT COUNT(u2.Название_участка), - u1.Номер_участка, u1.Номер_цеха, + u1.Номер_участка, u1.Название_участка, u1.Тип_участка, s.Фамилия_сотрудника, @@ -686,6 +705,15 @@ AS s.Имя_сотрудника, s.Отчество_сотрудника; +ALTER TABLE CWCборка + ADD (CONSTRAINT R_83 FOREIGN KEY (Код_участка) REFERENCES CWСборочный_участок (Код_участка)); + +ALTER TABLE CWCборка + ADD (CONSTRAINT R_84 FOREIGN KEY (Номер_бригады) REFERENCES CWБригада (Номер_бригады)); + +ALTER TABLE CWCборка + ADD (CONSTRAINT R_82 FOREIGN KEY (Категорский_цех) REFERENCES CWКатегория_изделия (Категорский_цех)); + ALTER TABLE CWАвтобусы ADD (CONSTRAINT O5 FOREIGN KEY (Код_вида) REFERENCES CWВид_изделия (Код_вида) ON DELETE CASCADE); @@ -711,7 +739,16 @@ ALTER TABLE CWИТП ADD (CONSTRAINT O9 FOREIGN KEY (Код_сотрудника) REFERENCES CWСотрудник (Код_сотрудника)); ALTER TABLE CWИзготовительный_участок - ADD (CONSTRAINT R_79 FOREIGN KEY (Код_участка) REFERENCES CWУчасток (Код_участка) ON DELETE CASCADE); + ADD (CONSTRAINT R_79 FOREIGN KEY (Код_участка) REFERENCES CWУчасток (Код_участка)); + +ALTER TABLE CWИзготовка + ADD (CONSTRAINT R_75 FOREIGN KEY (Категорский_цех) REFERENCES CWКатегория_изделия (Категорский_цех)); + +ALTER TABLE CWИзготовка + ADD (CONSTRAINT R_81 FOREIGN KEY (Код_участка) REFERENCES CWИзготовительный_участок (Код_участка)); + +ALTER TABLE CWИзготовка + ADD (CONSTRAINT R_88 FOREIGN KEY (Номер_бригады) REFERENCES CWБригада (Номер_бригады)); ALTER TABLE CWИнженер ADD (CONSTRAINT O10 FOREIGN KEY (Код_сотрудника) REFERENCES CWИТП (Код_сотрудника) ON DELETE CASCADE); @@ -725,15 +762,6 @@ ALTER TABLE CWМотоциклы ALTER TABLE CWПроизводственный_цех ADD (CONSTRAINT O1 FOREIGN KEY (Номер_цеха) REFERENCES CWЦех (Номер_цеха)); -ALTER TABLE CWРаботы - ADD (CONSTRAINT R_68 FOREIGN KEY (Номер_бригады) REFERENCES CWБригада (Номер_бригады)); - -ALTER TABLE CWРаботы - ADD (CONSTRAINT R_75 FOREIGN KEY (Категорский_цех) REFERENCES CWКатегория_изделия (Категорский_цех)); - -ALTER TABLE CWРаботы - ADD (CONSTRAINT R_48 FOREIGN KEY (Код_участка) REFERENCES CWУчасток (Код_участка)); - ALTER TABLE CWРабочий ADD (CONSTRAINT R_15 FOREIGN KEY (Номер_бригады) REFERENCES CWБригада (Номер_бригады)); @@ -743,32 +771,29 @@ ALTER TABLE CWРабочий ALTER TABLE CWРуководитель ADD (CONSTRAINT R_55 FOREIGN KEY (Код_сотрудника) REFERENCES CWИТП (Код_сотрудника)); +ALTER TABLE CWСборочный_участок + ADD (CONSTRAINT R_80 FOREIGN KEY (Код_участка) REFERENCES CWУчасток (Код_участка)); + ALTER TABLE CWСборщик ADD (CONSTRAINT O13 FOREIGN KEY (Код_сотрудника) REFERENCES CWРабочий (Код_сотрудника) ON DELETE CASCADE); -ALTER TABLE CWСварщик - ADD (CONSTRAINT O7 FOREIGN KEY (Код_сотрудника) REFERENCES CWРабочий (Код_сотрудника) ON DELETE CASCADE); - ALTER TABLE CWСлесарь ADD (CONSTRAINT O15 FOREIGN KEY (Код_сотрудника) REFERENCES CWРабочий (Код_сотрудника) ON DELETE CASCADE); ALTER TABLE CWТехник ADD (CONSTRAINT O11 FOREIGN KEY (Код_сотрудника) REFERENCES CWИТП (Код_сотрудника) ON DELETE CASCADE); -ALTER TABLE CWТехнолог - ADD (CONSTRAINT O12 FOREIGN KEY (Код_сотрудника) REFERENCES CWИТП (Код_сотрудника) ON DELETE CASCADE); - ALTER TABLE CWТокарь ADD (CONSTRAINT O14 FOREIGN KEY (Код_сотрудника) REFERENCES CWРабочий (Код_сотрудника) ON DELETE CASCADE); ALTER TABLE CWУчасток - ADD (CONSTRAINT R_27 FOREIGN KEY (Номер_цеха) REFERENCES CWЦех (Номер_цеха)); + ADD (CONSTRAINT R_57 FOREIGN KEY (Начальник_участка) REFERENCES CWРуководитель (Код_ответств)); ALTER TABLE CWУчасток - ADD (CONSTRAINT R_57 FOREIGN KEY (Начальник_участка) REFERENCES CWРуководитель (Код_ответств)); + ADD (CONSTRAINT R_87 FOREIGN KEY (Номер_цеха) REFERENCES CWПроизводственный_цех (Номер_цеха)); ALTER TABLE CWЦех ADD (CONSTRAINT R_58 FOREIGN KEY (Начальник_цеха) REFERENCES CWРуководитель (Код_ответств)); ALTER TABLE CWЭкземпляр_изделия - ADD (CONSTRAINT R_78 FOREIGN KEY (Номер_вида_изделия) REFERENCES CWВид_изделия (Номер_вида_изделия)); + ADD (CONSTRAINT R_78 FOREIGN KEY (Номер_вида_изделия) REFERENCES CWВид_изделия (Номер_вида_изделия)); \ No newline at end of file diff --git a/sources/queries/generate.sql b/sources/queries/generate.sql index 36075bc..16032bf 100644 --- a/sources/queries/generate.sql +++ b/sources/queries/generate.sql @@ -9,19 +9,19 @@ VALUES ('АЦ1', 'Артур', 'Артуров', 'Артурович', 'И', to_ INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ОТЧЕСТВО_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('АНП1', 'Егор', 'Егоров', 'Егорович', 'И', to_date('1998/06/14', 'yyyy/mm/dd'), 'ИТехнологАНП1', 'Технолог'); +VALUES ('АНП1', 'Егор', 'Егоров', 'Егорович', 'И', to_date('1998/06/14', 'yyyy/mm/dd'), 'ИТехникАНП1', 'Техник'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('КК4УАР', 'Джон', 'Джонс', 'И', to_date('1988/06/14', 'yyyy/mm/dd'), 'ИТехнологКК4УАР', 'Технолог'); +VALUES ('КК4УАР', 'Джон', 'Джонс', 'И', to_date('1988/06/14', 'yyyy/mm/dd'), 'ИТехникКК4УАР', 'Техник'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('КК5УАР', 'Боб', 'Браун', 'И', to_date('1972/06/14', 'yyyy/mm/dd'), 'ИТехнологКК5УАР', 'Технолог'); +VALUES ('КК5УАР', 'Боб', 'Браун', 'И', to_date('1972/06/14', 'yyyy/mm/dd'), 'ИТехникКК5УАР', 'Техник'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('КК6УАР', 'Дональд', 'Трамп', 'И', to_date('1946/06/14', 'yyyy/mm/dd'), 'ИТехнологКК6УАР', 'Технолог'); +VALUES ('КК6УАР', 'Дональд', 'Трамп', 'И', to_date('1946/06/14', 'yyyy/mm/dd'), 'ИТехникКК6УАР', 'Техник'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) @@ -35,6 +35,10 @@ INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) VALUES ('ФЕ9УАР', 'Макс', 'Чилтон', 'И', to_date('1976/06/14', 'yyyy/mm/dd'), 'ИТехникФЕ9УАР', 'Техник'); +INSERT INTO CWСОТРУДНИК +(НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) +VALUES ('ОМГ6', 'Сейлор', 'Мун', 'И', to_date('1954/08/14', 'yyyy/mm/dd'), 'ИИнженерОМГ6', 'Инженер'); + -- Будущие рабочие INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) @@ -51,15 +55,15 @@ VALUES ('ХЯХМ8', 'Илья', 'Обломов', 'Ильич', 'Р', to_date(' INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ОТЧЕСТВО_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) VALUES - ('КЕК09', 'Анна', 'Каренина', 'Аркадьевна', 'Р', to_date('1964/06/17', 'yyyy/mm/dd'), 'РСварщикКЕК09', 'Сварщик'); + ('КЕК09', 'Анна', 'Каренина', 'Аркадьевна', 'Р', to_date('1964/06/17', 'yyyy/mm/dd'), 'РСлесарьКЕК09', 'Слесарь'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('КЕК007', 'Джеймс', 'Бонд', 'Р', to_date('1964/06/17', 'yyyy/mm/dd'), 'РСварщикКЕК007', 'Сварщик'); +VALUES ('КЕК007', 'Джеймс', 'Бонд', 'Р', to_date('1964/06/17', 'yyyy/mm/dd'), 'РСлесарьКЕК007', 'Слесарь'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) -VALUES ('ЛХ44', 'Льюис', 'Хэмилтон', 'Р', to_date('1984/06/17', 'yyyy/mm/dd'), 'РСварщикЛХ44', 'Сварщик'); +VALUES ('ЛХ44', 'Льюис', 'Хэмилтон', 'Р', to_date('1984/06/17', 'yyyy/mm/dd'), 'РСлесарьЛХ44', 'Слесарь'); INSERT INTO CWСОТРУДНИК (НОМЕР_ДОГОВОРА, ИМЯ_СОТРУДНИКА, ФАМИЛИЯ_СОТРУДНИКА, ТИП_СОТРУДНИКА, ДАТА_РОЖДЕНИЯ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_СОТРУДНИКА) @@ -67,69 +71,73 @@ VALUES ('НР6', 'Нико', 'Росберг', 'Р', to_date('1904/06/17', 'yyyy -- ИТП INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИИнженерАФ1'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИИнженерАФ1', 'Инженер'); + +INSERT INTO CWИТП +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникАЦ1', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехникАЦ1'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникАНП1', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехнологАНП1'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникКК4УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехнологКК4УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникКК5УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехнологКК5УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникКК6УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехнологКК6УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникФЕ6УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехникФЕ6УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникФЕ8УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехникФЕ8УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИТехникФЕ9УАР', 'Техник'); INSERT INTO CWИТП -(КОД_СОТРУДНИКА) -VALUES ('ИТехникФЕ9УАР'); +(КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_ИТП) +VALUES ('ИИнженерОМГ6', 'Инженер'); -- Рабочие, без бригады INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСборщикЕ678ЕЕ'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСборщикЕ678ЕЕ', 'Сборщик'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РТокарьХУХМ8'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РТокарьХУХМ8', 'Токарь'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСлесарьХЯХМ8'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСлесарьХЯХМ8', 'Слесарь'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСварщикКЕК09'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСлесарьКЕК09', 'Слесарь'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСварщикКЕК007'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСлесарьКЕК007', 'Слесарь'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСварщикЛХ44'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСлесарьЛХ44', 'Слесарь'); INSERT INTO CWРАБОЧИЙ -(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА) -VALUES (NULL, 'РСлесарьНР6'); +(НОМЕР_БРИГАДЫ, КОД_СОТРУДНИКА, ДОЛЖНОСТЬ_РАБОЧЕГО) +VALUES (NULL, 'РСлесарьНР6', 'Слесарь'); -- Сборщик INSERT INTO CWСБОРЩИК @@ -150,24 +158,27 @@ INSERT INTO CWСЛЕСАРЬ (РАЗРЯД_СЛЕСАРЯ, КОД_СОТРУДНИКА) VALUES (5, 'РСлесарьНР6'); --- Сварщик -INSERT INTO CWСВАРЩИК -(СПЕЦИАЛИЗВАЦИЯ_СВАРЩИКА, КОД_СОТРУДНИКА) -VALUES ('подвеска', 'РСварщикКЕК09'); +INSERT INTO CWСЛЕСАРЬ +(РАЗРЯД_СЛЕСАРЯ, КОД_СОТРУДНИКА) +VALUES (3, 'РСлесарьКЕК09'); -INSERT INTO CWСВАРЩИК -(СПЕЦИАЛИЗВАЦИЯ_СВАРЩИКА, КОД_СОТРУДНИКА) -VALUES ('рама', 'РСварщикКЕК007'); +INSERT INTO CWСЛЕСАРЬ +(РАЗРЯД_СЛЕСАРЯ, КОД_СОТРУДНИКА) +VALUES (4, 'РСлесарьКЕК007'); -INSERT INTO CWСВАРЩИК -(СПЕЦИАЛИЗВАЦИЯ_СВАРЩИКА, КОД_СОТРУДНИКА) -VALUES ('рама', 'РСварщикЛХ44'); +INSERT INTO CWСЛЕСАРЬ +(РАЗРЯД_СЛЕСАРЯ, КОД_СОТРУДНИКА) +VALUES (5, 'РСлесарьЛХ44'); -- Инженеры INSERT INTO CWИНЖЕНЕР (СПЕЦИАЛИЗАЦИЯ_ИНЖЕНЕРА, КОД_СОТРУДНИКА) VALUES ('прототипирование', 'ИИнженерАФ1'); +INSERT INTO CWИНЖЕНЕР +(СПЕЦИАЛИЗАЦИЯ_ИНЖЕНЕРА, КОД_СОТРУДНИКА) +VALUES ('проектирование', 'ИИнженерОМГ6'); + -- Техники INSERT INTO CWТЕХНИК (СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) @@ -185,22 +196,21 @@ INSERT INTO CWТЕХНИК (СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) VALUES ('чертежи', 'ИТехникФЕ9УАР'); --- Технологи -INSERT INTO CWТЕХНОЛОГ -(СПЕЦИАЛИЗАЦИЯ_ТЕХНОЛОГА, КОД_СОТРУДНИКА) -VALUES ('исследования', 'ИТехнологАНП1'); +INSERT INTO CWТЕХНИК +(СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) +VALUES ('чертежи', 'ИТехникАНП1'); -INSERT INTO CWТЕХНОЛОГ -(СПЕЦИАЛИЗАЦИЯ_ТЕХНОЛОГА, КОД_СОТРУДНИКА) -VALUES ('практика', 'ИТехнологКК4УАР'); +INSERT INTO CWТЕХНИК +(СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) +VALUES ('чертежи', 'ИТехникКК4УАР'); -INSERT INTO CWТЕХНОЛОГ -(СПЕЦИАЛИЗАЦИЯ_ТЕХНОЛОГА, КОД_СОТРУДНИКА) -VALUES ('практика', 'ИТехнологКК5УАР'); +INSERT INTO CWТЕХНИК +(СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) +VALUES ('схемы', 'ИТехникКК5УАР'); -INSERT INTO CWТЕХНОЛОГ -(СПЕЦИАЛИЗАЦИЯ_ТЕХНОЛОГА, КОД_СОТРУДНИКА) -VALUES ('исследования', 'ИТехнологКК6УАР'); +INSERT INTO CWТЕХНИК +(СПЕЦИАЛИЗАЦИЯ_ТЕХНИКА, КОД_СОТРУДНИКА) +VALUES ('схемы', 'ИТехникКК6УАР'); -- Руководители INSERT INTO CWРУКОВОДИТЕЛЬ @@ -217,19 +227,19 @@ VALUES ('ИТехникФЕ6УАР', 'Цех', 'ЦехИТехникФЕ6УАР' INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) -VALUES ('ИТехнологАНП1', 'Цех', 'ЦехИТехнологАНП1'); +VALUES ('ИТехникАНП1', 'Цех', 'ЦехИТехникАНП1'); INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) -VALUES ('ИТехнологКК4УАР', 'Мастер', 'МастерИТехнологКК4УАР'); +VALUES ('ИТехникКК4УАР', 'Мастер', 'МастерИТехникКК4УАР'); INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) -VALUES ('ИТехнологКК5УАР', 'Мастер', 'МастерИТехнологКК5УАР'); +VALUES ('ИТехникКК5УАР', 'Мастер', 'МастерИТехникКК5УАР'); INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) -VALUES ('ИТехнологКК6УАР', 'Мастер', 'МастерИТехнологКК6УАР'); +VALUES ('ИТехникКК6УАР', 'Мастер', 'МастерИТехникКК6УАР'); INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) @@ -239,18 +249,22 @@ INSERT INTO CWРУКОВОДИТЕЛЬ (КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) VALUES ('ИТехникФЕ9УАР', 'Участок', 'УчастокИТехникФЕ9УАР'); +INSERT INTO CWРУКОВОДИТЕЛЬ +(КОД_СОТРУДНИКА, ОТВЕТСТВЕННОСТЬ, КОД_ОТВЕТСТВ) +VALUES ('ИИнженерОМГ6', 'Участок', 'УчастокИИнженерОМГ6'); + -- Бригада INSERT INTO CWБРИГАДА (НОМЕР_БРИГАДЫ, НАЗВАНИЕ_БРИГАДЫ, БРИГАДИР, МАСТЕР) -VALUES (1, 'Спецключ', 'РСборщикЕ678ЕЕ', 'МастерИТехнологКК4УАР'); +VALUES (1, 'Спецключ', 'РСборщикЕ678ЕЕ', 'МастерИТехникКК4УАР'); INSERT INTO CWБРИГАДА (НОМЕР_БРИГАДЫ, НАЗВАНИЕ_БРИГАДЫ, БРИГАДИР, МАСТЕР) -VALUES (2, 'FerrariTeam', 'РТокарьХУХМ8', 'МастерИТехнологКК5УАР'); +VALUES (2, 'FerrariTeam', 'РТокарьХУХМ8', 'МастерИТехникКК5УАР'); INSERT INTO CWБРИГАДА (НОМЕР_БРИГАДЫ, НАЗВАНИЕ_БРИГАДЫ, БРИГАДИР, МАСТЕР) -VALUES (3, 'Умелые', 'РСлесарьХЯХМ8', 'МастерИТехнологКК4УАР'); +VALUES (3, 'Умелые', 'РСлесарьХЯХМ8', 'МастерИТехникКК4УАР'); -- Рабочие из первой бригады UPDATE CWРАБОЧИЙ @@ -259,7 +273,7 @@ WHERE КОД_СОТРУДНИКА = 'РСборщикЕ678ЕЕ'; UPDATE CWРАБОЧИЙ SET НОМЕР_БРИГАДЫ = 1 -WHERE КОД_СОТРУДНИКА = 'РСварщикКЕК09'; +WHERE КОД_СОТРУДНИКА = 'РСлесарьКЕК09'; -- Рабочие из второй бригады UPDATE CWРАБОЧИЙ @@ -268,7 +282,7 @@ WHERE КОД_СОТРУДНИКА = 'РТокарьХУХМ8'; UPDATE CWРАБОЧИЙ SET НОМЕР_БРИГАДЫ = 2 -WHERE КОД_СОТРУДНИКА = 'РСварщикКЕК007'; +WHERE КОД_СОТРУДНИКА = 'РСлесарьКЕК007'; -- Рабочие из третьей бригады UPDATE CWРАБОЧИЙ @@ -277,7 +291,7 @@ WHERE КОД_СОТРУДНИКА = 'РСлесарьХЯХМ8'; UPDATE CWРАБОЧИЙ SET НОМЕР_БРИГАДЫ = 3 -WHERE КОД_СОТРУДНИКА = 'РСварщикЛХ44'; +WHERE КОД_СОТРУДНИКА = 'РСлесарьЛХ44'; UPDATE CWРАБОЧИЙ SET НОМЕР_БРИГАДЫ = 3 @@ -285,25 +299,25 @@ WHERE КОД_СОТРУДНИКА = 'РСлесарьНР6'; -- Цех INSERT INTO CWЦЕХ -(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА) -VALUES ('П321', 'ЦехИТехникФЕ6УАР', 'Газпромовский'); +(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА, ТИП_ЦЕХА) +VALUES ('П321', 'ЦехИТехникФЕ6УАР', 'Газпромовский', 'П'); INSERT INTO CWЦЕХ -(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА) -VALUES ('П43Я', 'ЦехИТехникФЕ8УАР', 'Цех им. Фурье'); +(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА, ТИП_ЦЕХА) +VALUES ('П43Я', 'ЦехИТехникФЕ8УАР', 'Цех им. Фурье', 'П'); INSERT INTO CWЦЕХ -(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА) -VALUES ('В106', 'ЦехИТехнологАНП1', 'Тестинг'); +(НОМЕР_ЦЕХА, НАЧАЛЬНИК_ЦЕХА, НАЗВАНИЕ_ЦЕХА, ТИП_ЦЕХА) +VALUES ('В106', 'ЦехИТехникАНП1', 'Тестинг', 'В'); -- Производственный цех INSERT INTO CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ -(НОМЕР_ЦЕХА, КОЛИЧЕСТВО_СБОР_КОНВ) -VALUES ('П321', 39); +(НОМЕР_ЦЕХА, СПОНСОР_ПРОИЗВОДСТВА) +VALUES ('П321', 'Газпром'); INSERT INTO CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ -(НОМЕР_ЦЕХА, КОЛИЧЕСТВО_СБОР_КОНВ) -VALUES ('П43Я', 68); +(НОМЕР_ЦЕХА, СПОНСОР_ПРОИЗВОДСТВА) +VALUES ('П43Я', NULL); -- Вспомогательный цех INSERT INTO CWВСПОМОГАТЕЛЬНЫЙ_ЦЕХ @@ -319,10 +333,23 @@ INSERT INTO CWУЧАСТОК (НОМЕР_ЦЕХА, НОМЕР_УЧАСТКА, НАЧАЛЬНИК_УЧАСТКА, ТИП_УЧАСТКА, НАЗВАНИЕ_УЧАСТКА, КОД_УЧАСТКА) VALUES ('П43Я', 1, 'УчастокИТехникФЕ9УАР', 'изготовка', 'Кузовной', 'П43Яизготовка1'); +INSERT INTO CWУЧАСТОК +(НОМЕР_ЦЕХА, НОМЕР_УЧАСТКА, НАЧАЛЬНИК_УЧАСТКА, ТИП_УЧАСТКА, НАЗВАНИЕ_УЧАСТКА, КОД_УЧАСТКА) +VALUES ('П43Я', 2, 'УчастокИИнженерОМГ6', 'сборка', 'Им. БД', 'П43Ясборка2'); + INSERT INTO CWУЧАСТОК (НОМЕР_ЦЕХА, НОМЕР_УЧАСТКА, НАЧАЛЬНИК_УЧАСТКА, ТИП_УЧАСТКА, НАЗВАНИЕ_УЧАСТКА, КОД_УЧАСТКА) VALUES ('П321', 2, 'УчастокИТехникАЦ1', 'изготовка', 'Подвесочный', 'П321изготовка2'); +-- Сборочный участок +INSERT INTO CWСБОРОЧНЫЙ_УЧАСТОК +(КОД_УЧАСТКА, КОЛВО_СБОР_КОНВ) +VALUES ('П321сборка1', 4); + +INSERT INTO CWСБОРОЧНЫЙ_УЧАСТОК +(КОД_УЧАСТКА, КОЛВО_СБОР_КОНВ) +VALUES ('П43Ясборка2', 6); + -- Изготовительный участок INSERT INTO CWИЗГОТОВИТЕЛЬНЫЙ_УЧАСТОК (КОД_УЧАСТКА, ЧАСТЬ_ИЗДЕЛИЯ) @@ -404,21 +431,30 @@ INSERT INTO CWГРУЗОВЫЕ_АВТОМОБИЛИ VALUES (1090, 'Грузовые5'); -- Работы -INSERT INTO CWРАБОТЫ -(НОМЕР_БРИГАДЫ, КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА) -VALUES (1, 'П43ЯАвтобусы', 'П43Яизготовка1'); - -INSERT INTO CWРАБОТЫ -(НОМЕР_БРИГАДЫ, КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА) -VALUES (2, 'П321Грузовые', 'П321изготовка2'); - -INSERT INTO CWРАБОТЫ -(НОМЕР_БРИГАДЫ, КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА) -VALUES (1, 'П321Мотоциклы', 'П321изготовка2'); - -INSERT INTO CWРАБОТЫ -(НОМЕР_БРИГАДЫ, КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА) -VALUES (2, 'П321Грузовые', 'П321сборка1'); +INSERT INTO CWИЗГОТОВКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П43ЯАвтобусы', 'П43Яизготовка1', 1); + +INSERT INTO CWИЗГОТОВКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П321Грузовые', 'П321изготовка2', 3); + +INSERT INTO CWИЗГОТОВКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П321Мотоциклы', 'П321изготовка2', 3); + +-- Сборка +INSERT INTO CWCБОРКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П321Грузовые', 'П321сборка1', 1); + +INSERT INTO CWCБОРКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П43ЯАвтобусы', 'П43Ясборка2', 2); + +INSERT INTO CWCБОРКА +(КАТЕГОРСКИЙ_ЦЕХ, КОД_УЧАСТКА, НОМЕР_БРИГАДЫ) +VALUES ('П321Мотоциклы', 'П321сборка1', 3); -- Экземпляр изделия INSERT INTO CWЭКЗЕМПЛЯР_ИЗДЕЛИЯ diff --git a/sources/queries/task1a.sql b/sources/queries/task1.sql similarity index 65% rename from sources/queries/task1a.sql rename to sources/queries/task1.sql index 677bdda..945dc97 100644 --- a/sources/queries/task1a.sql +++ b/sources/queries/task1.sql @@ -14,11 +14,4 @@ SELECT FROM CWВИД_ИЗДЕЛИЯ v INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ -WHERE k.НОМЕР_ЦЕХА = '&manufactory' -UNION ALL -SELECT - 'Всего видов изделий на предприятии: ' || COUNT(*), - '' -FROM CWВИД_ИЗДЕЛИЯ v - INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ; +WHERE k.НОМЕР_ЦЕХА = '&manufactory'; diff --git a/sources/queries/task10.sql b/sources/queries/task10.sql index 12678a9..dc14dbb 100644 --- a/sources/queries/task10.sql +++ b/sources/queries/task10.sql @@ -69,7 +69,7 @@ FROM ( s.ДОЛЖНОСТЬ_СОТРУДНИКА d, s.НОМЕР_ДОГОВОРА FROM CWУЧАСТОК u - INNER JOIN CWРАБОТЫ r + INNER JOIN CWCБОРКА r ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА INNER JOIN CWБРИГАДА b ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ @@ -92,7 +92,41 @@ FROM ( FROM CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ C INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t ON t.НОМЕР_ЦЕХА = C.НОМЕР_ЦЕХА - GROUP BY C.НОМЕР_ЦЕХА)))) + GROUP BY C.НОМЕР_ЦЕХА))) + UNION + SELECT + DISTINCT + s.ФАМИЛИЯ_СОТРУДНИКА f, + s.ИМЯ_СОТРУДНИКА i, + s.ОТЧЕСТВО_СОТРУДНИКА o, + s.ДОЛЖНОСТЬ_СОТРУДНИКА d, + s.НОМЕР_ДОГОВОРА + FROM CWУЧАСТОК u + INNER JOIN CWИЗГОТОВКА r + ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА + INNER JOIN CWБРИГАДА b + ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ + INNER JOIN CWРУКОВОДИТЕЛЬ o + ON o.КОД_ОТВЕТСТВ = b.МАСТЕР + INNER JOIN CWСОТРУДНИК s + ON s.КОД_СОТРУДНИКА = o.КОД_СОТРУДНИКА + WHERE u.НОМЕР_ЦЕХА = ANY ( + SELECT C.НОМЕР_ЦЕХА + FROM CWЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON C.НОМЕР_ЦЕХА = t.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА + HAVING COUNT(*) = ( + SELECT MAX(count) + FROM ( + SELECT + C.НОМЕР_ЦЕХА, + COUNT(*) count + FROM CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON t.НОМЕР_ЦЕХА = C.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА))) +) UNION ALL SELECT f, @@ -109,7 +143,7 @@ FROM ( s.ДОЛЖНОСТЬ_СОТРУДНИКА d, s.НОМЕР_ДОГОВОРА FROM CWУЧАСТОК u - INNER JOIN CWРАБОТЫ r + INNER JOIN CWCБОРКА r ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА INNER JOIN CWБРИГАДА b ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ @@ -130,7 +164,40 @@ FROM ( FROM CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ C INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t ON t.НОМЕР_ЦЕХА = C.НОМЕР_ЦЕХА - GROUP BY C.НОМЕР_ЦЕХА)))) + GROUP BY C.НОМЕР_ЦЕХА))) + UNION + + SELECT + DISTINCT + s.ФАМИЛИЯ_СОТРУДНИКА f, + s.ИМЯ_СОТРУДНИКА i, + s.ОТЧЕСТВО_СОТРУДНИКА o, + s.ДОЛЖНОСТЬ_СОТРУДНИКА d, + s.НОМЕР_ДОГОВОРА + FROM CWУЧАСТОК u + INNER JOIN CWИЗГОТОВКА r + ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА + INNER JOIN CWБРИГАДА b + ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ + INNER JOIN CWСОТРУДНИК s + ON s.КОД_СОТРУДНИКА = b.БРИГАДИР + WHERE u.НОМЕР_ЦЕХА = ANY ( + SELECT C.НОМЕР_ЦЕХА + FROM CWЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON C.НОМЕР_ЦЕХА = t.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА + HAVING COUNT(*) = ( + SELECT MAX(count) + FROM ( + SELECT + C.НОМЕР_ЦЕХА, + COUNT(*) count + FROM CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON t.НОМЕР_ЦЕХА = C.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА))) +) UNION ALL SELECT f, @@ -147,7 +214,42 @@ FROM ( s.ДОЛЖНОСТЬ_СОТРУДНИКА d, s.НОМЕР_ДОГОВОРА FROM CWУЧАСТОК u - INNER JOIN CWРАБОТЫ r + INNER JOIN CWCБОРКА r + ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА + INNER JOIN CWБРИГАДА b + ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ + INNER JOIN CWРАБОЧИЙ w + ON b.НОМЕР_БРИГАДЫ = w.НОМЕР_БРИГАДЫ + AND b.БРИГАДИР != w.КОД_СОТРУДНИКА + INNER JOIN CWСОТРУДНИК s + ON w.КОД_СОТРУДНИКА = s.КОД_СОТРУДНИКА + WHERE u.НОМЕР_ЦЕХА = ANY ( + SELECT C.НОМЕР_ЦЕХА + FROM CWЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON C.НОМЕР_ЦЕХА = t.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА + HAVING COUNT(*) = ( + SELECT MAX(count) + FROM ( + SELECT + C.НОМЕР_ЦЕХА, + COUNT(*) count + FROM CWПРОИЗВОДСТВЕННЫЙ_ЦЕХ C + INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ t + ON t.НОМЕР_ЦЕХА = C.НОМЕР_ЦЕХА + GROUP BY C.НОМЕР_ЦЕХА))) + UNION + + SELECT + DISTINCT + s.ФАМИЛИЯ_СОТРУДНИКА f, + s.ИМЯ_СОТРУДНИКА i, + s.ОТЧЕСТВО_СОТРУДНИКА o, + s.ДОЛЖНОСТЬ_СОТРУДНИКА d, + s.НОМЕР_ДОГОВОРА + FROM CWУЧАСТОК u + INNER JOIN CWИЗГОТОВКА r ON r.КОД_УЧАСТКА = u.КОД_УЧАСТКА INNER JOIN CWБРИГАДА b ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ diff --git a/sources/queries/task1b.sql b/sources/queries/task1b.sql deleted file mode 100644 index a2b0c95..0000000 --- a/sources/queries/task1b.sql +++ /dev/null @@ -1,29 +0,0 @@ -DEFINE manufactory='П321'; -DEFINE cat = 'Мотоциклы'; - -SELECT - v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ -FROM CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - INNER JOIN CWВИД_ИЗДЕЛИЯ v - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ -WHERE k.НОМЕР_ЦЕХА = '&manufactory' AND k.ТИП_КАТЕГОРИИ = '&cat' -UNION ALL -SELECT - 'Всего видов изделий на указанном цеху с указанной категорией: ' || COUNT(*) -FROM CWВИД_ИЗДЕЛИЯ v - INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ -WHERE k.НОМЕР_ЦЕХА = '&manufactory' AND k.ТИП_КАТЕГОРИИ = '&cat' -UNION ALL -SELECT - 'Всего видов изделий на указанном цеху: ' || COUNT(*) -FROM CWВИД_ИЗДЕЛИЯ v - INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ -WHERE k.НОМЕР_ЦЕХА = '&manufactory' -UNION ALL -SELECT - 'Всего видов изделий на предприятии: ' || COUNT(*) -FROM CWВИД_ИЗДЕЛИЯ v - INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ; diff --git a/sources/queries/task2b.sql b/sources/queries/task2.sql similarity index 100% rename from sources/queries/task2b.sql rename to sources/queries/task2.sql diff --git a/sources/queries/task2a.sql b/sources/queries/task2a.sql deleted file mode 100644 index 707e51a..0000000 --- a/sources/queries/task2a.sql +++ /dev/null @@ -1,46 +0,0 @@ -DEFINE start_time = to_date('2010/07/22', 'yyyy/mm/dd'); -DEFINE end_time = to_date('2038/07/22', 'yyyy/mm/dd'); - -SELECT - kt AS "Категори", - vn AS "Вид", - COUNT(*) AS "Кол-во" -FROM ( - SELECT - k.ТИП_КАТЕГОРИИ kt, - v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ vn, - z.НОМЕР_ЭКЗЕМПЛЯРА ne - FROM CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - INNER JOIN CWВИД_ИЗДЕЛИЯ v - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ - INNER JOIN CWЭКЗЕМПЛЯР_ИЗДЕЛИЯ e - ON e.НОМЕР_ВИДА_ИЗДЕЛИЯ = v.НОМЕР_ВИДА_ИЗДЕЛИЯ - INNER JOIN CWЖУРНАЛ z - ON z.НОМЕР_ЭКЗЕМПЛЯРА = e.НОМЕР_ЭКЗЕМПЛЯРА - WHERE z.ЭТАП_ЖИЗНЕННОГО_ЦИКЛА = 'Сборка' - AND z.КОНЕЦ <= &end_time - AND z.НАЧАЛО >= &start_time - GROUP BY k.ТИП_КАТЕГОРИИ, v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ, z.НОМЕР_ЭКЗЕМПЛЯРА) -GROUP BY kt, vn -UNION ALL -SELECT - 'Всего собрано ' || to_char(&start_time, 'dd.mm.yyyy') || '-' || to_char(&end_time - , 'dd.mm.yyyy'), - '', - COUNT(*) -FROM ( - SELECT - k.ТИП_КАТЕГОРИИ kt, - v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ vn, - z.НОМЕР_ЭКЗЕМПЛЯРА ne - FROM CWКАТЕГОРИЯ_ИЗДЕЛИЯ k - INNER JOIN CWВИД_ИЗДЕЛИЯ v - ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ - INNER JOIN CWЭКЗЕМПЛЯР_ИЗДЕЛИЯ e - ON e.НОМЕР_ВИДА_ИЗДЕЛИЯ = v.НОМЕР_ВИДА_ИЗДЕЛИЯ - INNER JOIN CWЖУРНАЛ z - ON z.НОМЕР_ЭКЗЕМПЛЯРА = e.НОМЕР_ЭКЗЕМПЛЯРА - WHERE z.ЭТАП_ЖИЗНЕННОГО_ЦИКЛА = 'Сборка' - AND z.КОНЕЦ <= &end_time - AND z.НАЧАЛО >= &start_time - GROUP BY k.ТИП_КАТЕГОРИИ, v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ, z.НОМЕР_ЭКЗЕМПЛЯРА); diff --git a/sources/queries/task3.sql b/sources/queries/task3.sql index d8d824f..b333481 100644 --- a/sources/queries/task3.sql +++ b/sources/queries/task3.sql @@ -1,5 +1,5 @@ -DEFINE itp='Технолог'; -DEFINE worker='Сборщик'; +DEFINE itp='Техник'; +DEFINE worker='Слесарь'; SELECT s.ФАМИЛИЯ_СОТРУДНИКА || ' ' || s.ИМЯ_СОТРУДНИКА || ' ' || s.ОТЧЕСТВО_СОТРУДНИКА AS "ФИО", diff --git a/sources/queries/task5.sql b/sources/queries/task5.sql index 133f19f..8073a5b 100644 --- a/sources/queries/task5.sql +++ b/sources/queries/task5.sql @@ -1,17 +1,16 @@ DEFINE essence='КАМАЗ'; -SELECT - u.НОМЕР_ЦЕХА, - u.НОМЕР_УЧАСТКА, - u.НАЗВАНИЕ_УЧАСТКА, - u.ТИП_УЧАСТКА || ' ' || i.ЧАСТЬ_ИЗДЕЛИЯ AS "Работа" +SELECT +'Изготовка: ' || i.ЧАСТЬ_ИЗДЕЛИЯ AS "Перечень работ", +u.НОМЕР_УЧАСТКА, +u.НОМЕР_ЦЕХА FROM CWВИД_ИЗДЕЛИЯ v INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k ON v.ТИП_КАТЕГОРИИ = k.ТИП_КАТЕГОРИИ - INNER JOIN CWРАБОТЫ r + INNER JOIN CWИЗГОТОВКА r ON r.КАТЕГОРСКИЙ_ЦЕХ = k.КАТЕГОРСКИЙ_ЦЕХ INNER JOIN CWУЧАСТОК u ON u.КОД_УЧАСТКА = r.КОД_УЧАСТКА - LEFT OUTER JOIN CWИЗГОТОВИТЕЛЬНЫЙ_УЧАСТОК i - ON i.КОД_УЧАСТКА = u.КОД_УЧАСТКА + INNER JOIN CWИЗГОТОВИТЕЛЬНЫЙ_УЧАСТОК i + ON i.КОД_УЧАСТКА = u.КОД_УЧАСТКА WHERE v.НАЗВАНИЕ_ВИДА_ИЗДЕЛИЯ = '&essence'; diff --git a/sources/queries/task6.sql b/sources/queries/task6.sql index 2050eea..4bf36dc 100644 --- a/sources/queries/task6.sql +++ b/sources/queries/task6.sql @@ -3,19 +3,24 @@ DEFINE sector=2; SELECT s.ИМЯ_СОТРУДНИКА || ' ' || s.ФАМИЛИЯ_СОТРУДНИКА || ' ' || s.ОТЧЕСТВО_СОТРУДНИКА AS "ФИО", - r.НОМЕР_БРИГАДЫ, - u.НОМЕР_УЧАСТКА, - u.НОМЕР_ЦЕХА - -FROM CWРАБОТЫ t - INNER JOIN CWУЧАСТОК u - ON t.КОД_УЧАСТКА = u.КОД_УЧАСТКА - INNER JOIN CWБРИГАДА b - ON b.НОМЕР_БРИГАДЫ = t.НОМЕР_БРИГАДЫ + r.НОМЕР_БРИГАДЫ AS "Номер бригады", + §or AS "Номер участка", + '&manufactory' as "Номер цеха" +FROM CWСОТРУДНИК s INNER JOIN CWРАБОЧИЙ r - ON b.НОМЕР_БРИГАДЫ = r.НОМЕР_БРИГАДЫ - INNER JOIN CWСОТРУДНИК s ON s.КОД_СОТРУДНИКА = r.КОД_СОТРУДНИКА - -WHERE u.НОМЕР_ЦЕХА = '&manufactory' AND u.НОМЕР_УЧАСТКА = §or +WHERE r.НОМЕР_БРИГАДЫ = ANY ( + SELECT + DISTINCT i.НОМЕР_БРИГАДЫ + FROM CWИЗГОТОВКА i + INNER JOIN CWУЧАСТОК u + ON i.КОД_УЧАСТКА = u.КОД_УЧАСТКА + WHERE u.НОМЕР_ЦЕХА = '&manufactory' AND u.НОМЕР_УЧАСТКА = §or + UNION + SELECT + DISTINCT s.НОМЕР_БРИГАДЫ + FROM CWCБОРКА s + INNER JOIN CWУЧАСТОК u + ON s.КОД_УЧАСТКА = u.КОД_УЧАСТКА + WHERE u.НОМЕР_ЦЕХА = '&manufactory' AND u.НОМЕР_УЧАСТКА = §or) ORDER BY r.НОМЕР_БРИГАДЫ; diff --git a/sources/queries/task7.sql b/sources/queries/task7.sql index cf63cb4..ba49236 100644 --- a/sources/queries/task7.sql +++ b/sources/queries/task7.sql @@ -1,8 +1,8 @@ DEFINE manufactory='П321'; -DEFINE sector=2; +DEFINE sector=1; SELECT - fio AS "ФИО", + fio AS "ФИО мастера", n AS "Номер бригады" FROM ( SELECT @@ -10,7 +10,23 @@ FROM ( s.ФАМИЛИЯ_СОТРУДНИКА || ' ' || s.ИМЯ_СОТРУДНИКА || ' ' || s.ОТЧЕСТВО_СОТРУДНИКА fio, s.КОД_СОТРУДНИКА, b.НОМЕР_БРИГАДЫ n - FROM CWРАБОТЫ t + FROM CWCБОРКА t + INNER JOIN CWУЧАСТОК u + ON t.КОД_УЧАСТКА = u.КОД_УЧАСТКА + INNER JOIN CWБРИГАДА b + ON t.НОМЕР_БРИГАДЫ = b.НОМЕР_БРИГАДЫ + INNER JOIN CWРУКОВОДИТЕЛЬ r + ON r.КОД_ОТВЕТСТВ = b.МАСТЕР + INNER JOIN CWСОТРУДНИК s + ON r.КОД_СОТРУДНИКА = s.КОД_СОТРУДНИКА + WHERE u.НОМЕР_ЦЕХА = '&manufactory' AND u.НОМЕР_УЧАСТКА = §or + UNION + SELECT + DISTINCT + s.ФАМИЛИЯ_СОТРУДНИКА || ' ' || s.ИМЯ_СОТРУДНИКА || ' ' || s.ОТЧЕСТВО_СОТРУДНИКА fio, + s.КОД_СОТРУДНИКА, + b.НОМЕР_БРИГАДЫ n + FROM CWИЗГОТОВКА t INNER JOIN CWУЧАСТОК u ON t.КОД_УЧАСТКА = u.КОД_УЧАСТКА INNER JOIN CWБРИГАДА b diff --git a/sources/queries/task9.sql b/sources/queries/task9.sql index 46e4a63..e3c00d8 100644 --- a/sources/queries/task9.sql +++ b/sources/queries/task9.sql @@ -12,7 +12,7 @@ FROM CWСОТРУДНИК s WHERE r.НОМЕР_БРИГАДЫ = ANY ( SELECT DISTINCT t.НОМЕР_БРИГАДЫ - FROM CWРАБОТЫ t + FROM CWCБОРКА t INNER JOIN CWКАТЕГОРИЯ_ИЗДЕЛИЯ k ON t.КАТЕГОРСКИЙ_ЦЕХ = k.КАТЕГОРСКИЙ_ЦЕХ WHERE k.ТИП_КАТЕГОРИИ = '&cat');