Определение дополнительных ограничений целостности
Перечислим ограничения целостности, которые не указаны в табл. 14–23.
Это следующие:
1) Значения всех числовых атрибутов – больше 0 (или null, если атрибут необязателен).
2) Область значений атрибута Sex отношения EMPLOYEES – символы 'м' и 'ж'.
3) Отношение ROOMS не имеет первичного ключа, но комбинация значений (R_no, Tel) уникальна.
4) В отношении TITLES порядковые номера авторов на обложке одной книги должны идти подряд, начиная с 1.
5) В отношении TITLES сумма процентов гонорара по одной книге равна 100.
Ограничения (4,5) нельзя реализовать в схеме отношения. В реальных БД подобные ограничения целостности реализуются программно (через внешнее приложение или специальную процедуру контроля данных).
Описание групп пользователей и прав доступа
Опишем для каждой группы пользователей права доступа к каждой таблице и к каждому полю (атрибуту):
1) Администратор БД: имеет доступ ко всем данным (по записи), может изменять структуру базы данных и связи между отношениями. Устанавливает права доступа для всех остальных групп.
2) Представители администрации компании: имеют доступ по чтению ко всем данным и доступ по записи к отношениям POSTS, ROOMS и EMPLOYEES.
3) Менеджеры: имеет доступ по чтению ко всем данным, кроме отношения POSTS. Имеют доступ по записи к отношениям AUTHORS, CUSTOMERS, BOOKS, EDITORS, TITLES, ORDERS, ITEMS.
4) Редакторы: имеют доступ по чтению к следующим отношениям:
· AUTHORS, кроме полей A_passp, A_org, A_pdate, A_INN (паспортные данные и ИНН).
· BOOKS, кроме полей B_advance, B_fee (затраты и гонорар).
· EDITORS.
· TITLES.
5) Сотрудники, принимающие и выполняющие заказы: имеют доступ по записи к отношениям CUSTOMERS, ORDERS, ITEMS и по чтению к полям B_title, B_circul, B_price и B_rest отношения BOOKS (название, тираж, цена, непроданный остаток тиража).
Реализация проекта базы данных
Не привязываясь к конкретной СУБД и выполнять описание основных операций по обработки данных на Transact-SQL .
Запросы к БД.
Запрос – это команда, которая формулируется для СУБД, и требует предоставитьопределенную информацию, указанную в параметрах команды.
Все запросы в SQL конструируются на базе одной команды, структура которой, с одной стороны, довольно проста, но, с другой стороны, ее можно расширять для того, чтобы выполнять очень сложные вычисления и обработку данных.
В самом простом случае команда SELECT дает инструкцию СУБД для поиска информации в таблице. В этом случае синтаксис команды следующий:
SELECT <имя столбца1>, <имя столбца2>, ...
FROM <имя таблицы>
[WHERE <условие>]
SELECT - ключевое слово, которое сообщает СУБД, что эта команда является запросом. Все запросы начинаются с этого ключевого слова, за которым следует пробел.
<имя столбца1>,... - список столбцов таблицы, которые должны быть выведены на экран в результате выполнения запроса. Столбцы, имена которых не представлены в списке, не включаются в состав выходных данных команды. Это, конечно, не приводит к удалению из таблиц таких столбцов или содержащейся в них информации, потому что запрос не воздействует на информацию в таблицах - он только отображает данные.
FROM - ключевое слово, которое должно быть представлено в каждом запросе. За ним следует пробел, а затем - имя таблицы, используемой в качестве источника информации для запроса.
WHERE - ключевое слово, за которым следует условие, которому должны соответствовать выбираемые значения.
В результате запроса, в самом простом случае, данные выводятся на экран в виде нескольких колонок (одна колонка соответствует одному столбцу в таблице базы данных). Причем это вывод может быть не упорядочен. Обычно строки выдаются в том порядке, в котором они вводятся или хранятся в таблице. Можно упорядочить выходные данные непосредственно с помощью SQL-команд, указав специальное предложение. Но об этом чуть позже.
Если в команде SELECT поставить звездочку (*) вместо списка столбцов, то в результате будет выведена вся информация, содержащаяся в каждом столбце таблицы:
SELECT * FROM <имя таблицы>
Для того, чтобы получить информацию из строго определенных столбцов таблицы, необходимо просто указать те столбцы, которые требуется просмотреть, и не указывать те, которые не требуются.
Причем порядок вывода столбцов будет именно таким, как указано в запросе.
Пример: вывести информацию о табельном номере, именах и дате рождения сотрудников:
SELECT E_ID,E_NAME, E_BORN FROM Employees