Таблица 6.
Название атрибута | Имя поля | Тип поля | Размер | Ограничения |
Уникальный номер единицы автотранспорта | IDTransport | INT | NOT NULL, PRIMARY KEY | |
Уникальный номер автобазы | IDAutobase | INT | NOT NULL, FOREIGN KEY | |
Уникальный номер марки | IDMarka | INT | NOT NULL, FOREIGN KEY | |
Гаражный номер | GarageNumber | INT | NOT NULL, UNIQUE | |
Госномер | GosNumber | VARCHAR | 10 | UNIQUE |
USE autorem;
GO
CREATE TABLE Transport
(IDTransport INT IDENTITY CONSTRAINT TransportPrimary PRIMARY KEY,
IDAutobase INT,
IDMarka INT,
GarageNumber INT NOT NULL CONSTRAINT GarageNumberTransportUnique UNIQUE,
GosNumber VARCHAR(10) CONSTRAINT GosNumberTransportUnique UNIQUE,
CONSTRAINT TransportAutobaseForeign FOREIGN KEY (IDAutobase)REFERENCES Autobase,
CONSTRAINT TransportMarkaForeign FOREIGN KEY (IDMarka) REFERENCES Marka);
GO
Состояние единицы (ConditionUnit)
Таблица содержит данные обо всех состояниях автотранспорта. Каждый автотранспорт имеет уникальный номер, который является первичным ключом отношения. Схема отношения имеет вид: R(IDConditionUnit)={IDCondition, IDTransport, Working, Beginning, Theend}, что аналогично R(Уникальный номер работы)={Уникальный номер единицы автотранспорта, Уникальный номер состояния единицы, Описание работы, Начало состояния, Конец состояния}. Внешними ключами являются IDCondition (Уникальный номер состояния единицы), IDTransport (Уникальный номер единицы автотранспорта). Атрибут IDConditionUnit (Уникальный номер работы) должен быть уникален и не равным NULL, т.к. является первичным ключом. Атрибут IDCondition должен быть уникальным и не быть равным NULL, т.к. является внешним ключом отношения. Атрибут IDTransport должен быть уникальным и не быть равным NULL, т.к. является внешним ключом отношения. Размер поля Working должен содержать символьные значения и максимальный среднестатистический размер атрибута должен равен 200 символов (например, "покраска переднего левого крыла; покраска крыши а/м; покраска передней левой двери; подготовка к покраске и покраска передней левой стойки; чистка хромированных деталей"), следовательно, принимая во внимание необходимость избыточности размера поля порядка 50 символов, имеем размер поля Working типа VARCHAR равным 250. Поля Beginning и Theend должны содержать даты постановки автотранспорта на ремонт и снятие с него, следовательно, типы этих полей определим как DateTime (см. Таблица 7).
Таблица 7.
Название атрибута | Имя поля | Тип поля | Размер | Ограничения |
Уникальный номер работы | IDConditionUnit | INT | NOT NULL, PRIMARY KEY | |
Уникальный номер состояния единицы | IDCondition | INT | NOT NULL, FOREIGN KEY | |
Уникальный номер единицы автотранспорта | IDTransport | INT | NOT NULL, FOREIGN KEY | |
Описание работы | Working | VARCHAR | 250 | |
Начало состояния | Beginning | DateTime | ||
Конец состояния | Theend | DateTime |
USE autorem;
GO
CREATE TABLE ConditionUnit
(IDConditionUnit INT IDENTITY CONSTRAINT ConditionUnitPrimary PRIMARY KEY,
IDCondition INT,
IDTransport INT,
Working VARCHAR(250),
Beginning DateTime,
Theend DateTime,
CONSTRAINT ConditionUnitConditionForeign FOREIGN KEY (IDCondition)REFERENCES Condition,
CONSTRAINT ConditionUnitTransportForeign FOREIGN KEY (IDTransport) REFERENCES Transport);
Команды языка манипулирования данными
Команды языка манипулирования данными (DML)
Три хорошо известные операции над кортежами:
1. Добавление, реализуется в SQL с помощью команды, INSERT
2. Правка, реализуется в SQL с помощью команды, UPDATE
3. Удаление, реализуется в SQL с помощью команды, DELETE Команда вставки INSERT используется для ввода новых строк в таблицу. Команда UPDATE - предназначена для редактирования данных в таблице. Команда DELETE - удаляет записи в таблице.
Команды языка определения данных (DDL)
Команда ALTER TABLE используется для внесения изменений в описание таблицы, в том числе для: добавления и изменения столбцов, добавления, разрешения, запрета и удаления ограничений.
Команда DROP TABLE используется для удаления таблицы.
Команда вставки - INSERT. Команда языка DML - INSERT используется для ввода новых строк в таблицу. Синтаксис команды:
INSERT INTO {<имя таблицы>[(<имя столбца> [псевдоним] [, …n]] |[<подзапрос>]}
VALUES (<значение>[,…n]);
При реализации команды INSERT необходимо отслеживать, чтобы последовательность данных в предложение VALUES, соответствовала порядку столбцов в таблице.
Заполнение таблицы "Автобаза"
INSERT INTO Autobase(NameAutobase,Address) VALUES('Автобаза №1','г.Воркута, ул.Транспортная,10');
INSERT INTO Autobase(NameAutobase,Address) VALUES('Автобаза №2','г.Воркута, ул.Комсомольская,11');
Заполнение таблицы "Справочник состояний"
INSERT INTO Condition (NameCondition) VALUES ('ТО1');
INSERT INTO Condition (NameCondition) VALUES ('ТО2');
INSERT INTO Condition (NameCondition) VALUES ('СО');
INSERT INTO Condition (NameCondition) VALUES ('ТР');
Заполнение таблицы "Справочник технического обслуживания"
INSERT INTO Technical (NameTechnical,TO1,TO2) VALUES ('легковые', 3500, 14000);
INSERT INTO Technical (NameTechnical, TO1, TO2) VALUES ('автобусы',2600,13000);
INSERT INTO Technical (NameTechnical,TO1,TO2) VALUES ('грузовые, автобусы на базе грузовых автомобилей',2200,11000);
Заполнение таблицы "Тип марок автотранспорта"
INSERT INTO TypeMarka (NameTypeMarka, IDTechnical) VALUES ('легковая',1);
INSERT INTO TypeMarka (NameTypeMarka, IDTechnical) VALUES ('мазутовоз',3);
INSERT INTO TypeMarka (NameTypeMarka, IDTechnical) VALUES ('молокоцистерна',3);
INSERT INTO TypeMarka (NameTypeMarka,IDTechnical) VALUES ('поливомоечная',3);
INSERT INTO TypeMarka (NameTypeMarka, IDTechnical) VALUES ('самосвал',3);
INSERT INTO TypeMarka (NameTypeMarka, IDTechnical) VALUES ('спец.фургон',3);
Заполнение таблицы "Марка автотранспорта"
INSERT INTO Marka (IDTypeMarka, NameMarka, Capacity) VALUES (1,'ГАЗ-31029',0.00);
INSERT INTO Marka (IDTypeMarka, NameMarka, Capacity) VALUES(1, УАЗ-2206',0.00);
INSERT INTO Marka (IDTypeMarka, NameMarka, Capacity) VALUES (22,'КАВЗуд ЛАЗ',0.00);
Заполнение таблицы "Автотранспорт"
INSERT INTO Transport (IDAutobase, IDMarka, Garage Number, Gos Number) VALUES (1,294, 502,'11ко3813');
INSERT INTO Transport (IDAutobase, IDMarka, GarageNumber, GosNumber) VALUES(1,294, 837,'11ко3866');
INSERT INTO Transport (IDAutobase, IDMarka, Garage Number, GosNumber) VALUES(1,483, 125,'14-51КМО');
INSERT INTO Transport (IDAutobase, IDMarka, GarageNumber, GosNumber) VALUES (1,483, 152,'14-52КМО');
Заполнение таблицы "Состояние единицы"
INSERT INTO Condition Unit (IDCondition, IDTransport, Working, Beginning, Theend) VALUES (2,1,'покраска переднего левого крыла; покраска крыши а/м','2008.09.15','2008.09.16');
INSERT INTO ConditionUnit (IDCondition, IDTransport, Working, Beginning, Theend) VALUES (2,2,'покраска передней левой двери; подготовка к покраске и покраска передней левой стойки','2008.09.15','2008.09.16');
INSERT INTO ConditionUnit (IDCondition, IDTransport, Working, Beginning, Theend) VALUES (2,3,'чистка хромированных деталей','2008.09.15','2008.09.16');
Запросы к базе данных
Команда SELECT позволяет реализовывать все операторы реляционной алгебры над отношениями (таблицами) базы данных. Обязательными предложениями команды SELECT являются предложения SELECT и FROM. В самой простой форме, команда SELECT используется для того, чтобы извлечь информацию из таблицы. Не обязательно использовать все предложения команды, но обязательно соблюдать их порядок следования, то есть предложение ORDER BY всегда завершает команду SELECT, а предложение HAVING всегда стоит после GROUP BY, которое, в свою очередь, не может предшествовать предложению WHERE и т.п.
SELECT [DISTINCT] *|<столбец> [<псевдоним>] [,<групповая функция>] [,…n]
FROM <таблица>[, …n]| (<подзапрос>)
[WHERE <условие>]
[GROUP BY<выражение группировки]
[HAVING <условие отбора группы>]
[ORDER BY < столбец >[,…n]]
Команда SELECT позволяет извлечь определенную информацию из таблицы. Например, просмотреть содержимое одного или нескольких столбцов, присвоив столбцам вывода имена, отличные от имен атрибутов в таблице, но более информативные. Чтобы вывести содержание всех столбцов, можно заменить их перечисление знаком *. В этом случае столбцы будут выведены в том порядке, в котором они следуют в таблице. Если вы хотите изменить порядок, то придется перечислить имена столбцов в нужном порядке.
Предложение FROM используется для указания перечня таблиц, используемых в запросе и условия их соединения.
Выбор всех автобаз
Select * from AutoBase
Выбор Гаражного номера, Госномера из таблицы "Автотранспорт", Имя марки из таблицы "Марка автотранспорта", Тип марки из таблицы "Тип марки автотранспорта"
Select T.IDTransport, T.GarageNumber[Гар.№], TM.NameTypeMarka+' '+M.NameMarka+' '+T.GosNumber[Тип марки, Имя марки, Гос.номер] from Transport T INNER JOIN Marka M ON T.IDmarka=M.IDmarka INNER JOIN TypeMarka TM ON M.IDTypeMarka=TM.IDTypeMarka where (T.IDAutobase=:IDAutoBase) ORDER BY T.GarageNumber;
Выбор Даты постановки в ремонт, Дата снятия с ремонта, Вид работ
Select LTrim(Str(Day(Beginning)))+'.'+LTrim(Str(Month(Beginning)))+'.' +LTrim(Str(Year(Beginning)))[Дата пост.],LTrim(Str(Day(Theend)))+'.' +LTrim(Str(Month(Theend)))+'.'+LTrim(Str(Year(Theend)))[Дата вых.], Working[Вид работ] from ConditionUnit where (IDTransport=:IDTransport);
Согласно приведенным выше запросам имеем некоторые выходные данные:
Хранимые процедуры