Spec-Zone .ru
спецификации, руководства, описания, API
След: JDBC (ТМ) Доступ к базе данных
Урок: Введение JDBC
Краткий обзор Реляционной базы данных
Домашняя страница > JDBC (ТМ) Доступ к базе данных > Введение JDBC

Краткий обзор Реляционной базы данных

База данных является средством того, чтобы хранить информацию таким способом, которым информация может быть получена от этого. В самых простых сроках реляционная база данных является той, которая представляет информацию в таблицах со строками и столбцами. Таблица упоминается как отношение в том смысле, что это - набор объектов того же самого типа (строки). Данные в таблице могут быть связаны согласно общим ключам или понятиям, и возможность получить связанные данные от таблицы является основанием для термина реляционная база данных. Система управления базами данных (DBMS) обрабатывает способ, которым данные сохранены, сохраняются, и получаются. В случае реляционной базы данных Система управления реляционными базами данных (RDBMS) выполняет эти задачи. DBMS как использующийся в этой книге является общим термином, который включает RDBMS.

Правила целостности

Реляционные таблицы следуют за определенными правилами целостности гарантировать, что данные, которые они содержат, остаются точными и всегда доступны. Во-первых, строки в реляционной таблице должны все быть отличными. Если есть дублирующиеся строки, могут быть проблемы, решающие, какой из двух возможных выборов является корректным. Для большинства DBMSs пользователь может определить, что дублирующиеся строки не позволяются, и если это будет сделано, то DBMS предотвратит добавление любых строк, которые копируют существующую строку.

Второе правило целостности традиционной реляционной модели состоит в том, что значения столбцов не должны повторять группы или массивы. Третий аспект целостности данных включает понятие нулевого значения. База данных заботится о ситуациях, где данные, возможно, не доступны при использовании нулевого значения, чтобы указать, что значение отсутствует. Это не приравнивается к пробелу или нулю. Пробел считают равным другому пробелу, нуль равен другому нулю, но два нулевых значения не считают равными.

Когда каждая строка в таблице отличается, возможно использовать один или более столбцов, чтобы идентифицировать определенную строку. Этот уникальный столбец или группу столбцов вызывают первичным ключом. Любой столбец, который является частью первичного ключа, не может быть нулем; если бы это было, то первичный ключ, содержащий это, больше не был бы полным идентификатором. Это правило упоминается как объектная целостность.

Employees таблица иллюстрирует некоторые из этих понятий реляционной базы данных. У этого есть пять столбцов и шесть строк с каждой строкой, представляющей различного сотрудника.

Employees Таблица
Employee_Number First_name Last_Name Date_of_Birth Car_Number
10001 Джон Вашингтон 28-Aug-43 5
10083 Arvid Шарма 24-Nov-54 нуль
10120 Джонас Гинсберг 01-Jan-69 нуль
10005 Флоренция Войоковский 04-Jul-71 12
10099 Шон Вашингтон 21-Sep-66 нуль
10035 Элизабет Ямагучи 24-Dec-59 нуль

Первичный ключ для этой таблицы обычно был бы числом сотрудника, потому что каждый, как гарантируют, будет отличаться. (Число также более эффективно чем строка для того, чтобы сделать сравнения.) Также было бы возможно использовать First_Name и Last_Name потому что комбинация двух также идентифицирует только одну строку в нашей базе данных-образце. Используя одну только фамилию не работал бы, потому что есть два сотрудника с фамилией "Вашингтона". В данном случае имена все отличаются, таким образом, можно было очевидно использовать, что столбец как первичный ключ, но лучше избегать использования столбца, где копии могли произойти. Если Элизабет Джонс получает задание в этой компании, и первичный ключ First_Name, RDBMS не будет позволять ее имени быть добавленным (если это было определено, что никакие копии не разрешаются). Поскольку уже есть Элизабет в таблице, добавляя, что второй сделал бы первичный ключ бесполезным как способ идентифицировать только одну строку. Отметьте это, хотя используя First_Name и Last_Name уникальный составной ключ для этого примера, это не могло бы быть уникально в большей базе данных. Отметьте также что Employees таблица предполагает, что может быть только один автомобиль на сотрудника.

SELECT Операторы

SQL является языком, разработанным, чтобы использоваться с реляционными базами данных. Есть ряд основных команд SQL, который считают стандартным и используется всем RDBMSs. Например, все RDBMSs используют SELECT оператор.

A SELECT оператор, также названный запросом, используется, чтобы получить информацию от таблицы. Это определяет одни или более заголовков столбцов, одну или более таблиц, из которых можно выбрать, и некоторые критерии для выбора. RDBMS возвращает строки записей столбца, которые удовлетворяют установленные требования. A SELECT оператор, такой как следующее выберет первые и последние имена сотрудников, у которых есть служебные машины:

SELECT First_Name, Last_Name
FROM Employees
WHERE Car_Number IS NOT NULL

Набор результатов (набор строк, которые удовлетворяют требование не наличия нуля в Car_Number столбец), следует. Имя и фамилия печатаются для каждой строки, которая удовлетворяет требование потому что SELECT оператор (первая строка) определяет столбцы First_Name и Last_Name. FROM пункт (вторая строка) дает таблицу, из которой будут выбраны столбцы.

FIRST_NAME LAST_NAME
Джон Вашингтон
Флоренция Войоковский

Следующий код производит набор результатов, который включает целую таблицу, потому что это просит все столбцы в табличных Сотрудниках без ограничений (нет WHERE пункт). Отметьте это SELECT * средства"SELECT все столбцы."

SELECT *
FROM Employees

WHERE Пункты

WHERE пункт в a SELECT оператор обеспечивает критерии для того, чтобы они выбрали значения. Например, в следующем фрагменте кода, значения будут выбраны, только если они происходят подряд в который столбец Last_Name начинается со строки 'Вашингтон'.

SELECT First_Name, Last_Name
FROM Employees
WHERE Last_Name LIKE 'Washington%'

Ключевое слово LIKE используется, чтобы сравнить строки, и это предлагает функцию, что образцы, содержащие подстановочные знаки, могут использоваться. Например, во фрагменте кода выше, есть знак процента (%) в конце 'Вашингтона', который показывает, что любое значение, содержащее строку 'Вашингтон' плюс нуль или больше дополнительных символов, удовлетворит этот критерий выбора. Таким образом, 'Вашингтон' или 'Washingtonian' были бы соответствиями, но 'Промывка' не будет. Другой подстановочный знак, используемый в LIKE пункты являются underbar (_), который обозначает любой символ. Например,

WHERE Last_Name LIKE 'Ba_man'

соответствовал бы 'Бармену', 'Бандиту', 'Balman', 'Лоточнику', 'Bamman', и так далее.

У фрагмента кода ниже есть a WHERE пункт, который использует знак "равно" (=) сравнить числа. Это выбирает первое и последнее имя сотрудника, который является присвоенным автомобилем 12.

SELECT First_Name, Last_Name
FROM Employees
WHERE Car_Number = 12

Следующий фрагмент кода выбирает первые и последние имена сотрудников, число сотрудника которых больше чем 10005:

SELECT First_Name, Last_Name
FROM Employees
WHERE Employee_Number > 10005

WHERE пункты могут стать довольно тщательно продуманными, с многократными условиями и, в некотором DBMSs, вложенных условиях. Этот краткий обзор не будет касаться сложный WHERE пункты, но следующий фрагмент кода имеет a WHERE пункт с двумя условиями; этот запрос выбирает первые и последние имена сотрудников, число сотрудника которых - меньше чем 10100 и у кого нет служебной машины.

SELECT First_Name, Last_Name
FROM Employees
WHERE Employee_Number < 10100 and Car_Number IS NULL

Специальный тип WHERE пункт включает соединение, которое объясняется в следующем разделе.

Соединения

Отличительный признак реляционных баз данных - то, что возможно получить данные больше чем от одной таблицы в том, что вызывают соединением. Предположите, что после получения имен сотрудников, у которых есть служебные машины, один, хотел узнать, кто имеет который автомобиль, включая номерной знак, мильяж, и год автомобиля. Эта информация хранится в другой таблице, Cars:

Cars Таблица
Car_Number License_Plate Mileage Year
5 ABC123 5000 1996
12 DEF123 7500 1999

Должен быть один столбец, который появляется в обеих таблицах, чтобы связать их друг с другом. Этот столбец, который должен быть первичным ключом в одной таблице, вызывают внешним ключом в другой таблице. В этом случае столбец, который появляется в двух таблицах, Car_Number, который является первичным ключом для таблицы Cars и внешний ключ в таблице Employees. Если автомобиль 1996 года с номерным знаком ABC123 был разрушен и удален из Cars таблица, тогда Car_Number 5 должен был бы также быть удален из Employees таблица, чтобы поддержать то, что вызывают ссылочной целостностью. Иначе, столбец внешнего ключа (Car_Number) в Employees таблица содержала бы запись, которая ни к чему не обращалась в Cars таблица. Внешний ключ должен или быть нулем или равный существующему значению первичного ключа таблицы, к которой это обращается. Это отличается от первичного ключа, который, возможно, не является нулем. Есть несколько нулевых значений в Car_Number столбец в таблице Employees потому что для сотрудника возможно не иметь служебную машину.

Следующий код просит первые и последние имена сотрудников, у которых есть служебные машины и для номерного знака, мильяжа, и год тех автомобилей. Отметьте что FROM пункт перечисляет обоих Employees и Cars таблицы, потому что запрошенные данные содержатся в обеих таблицах. Используя имя таблицы и точку (.) прежде, чем имя столбца указывает, какая таблица содержит столбец.

SELECT Employees.First_Name, Employees.Last_Name,
    Cars.License_Plate, Cars.Mileage, Cars.Year
FROM Employees, Cars
WHERE Employees.Car_Number = Cars.Car_Number

Это возвращает набор результатов, который будет выглядеть подобным следующему:

FIRST_NAME LAST_NAME LICENSE_PLATE MILEAGE YEAR
Джон Вашингтон ABC123 5000 1996
Флоренция Войоковский DEF123 7500 1999

Общие Команды SQL

Команды SQL делятся на категории, два основных, являющиеся Языком манипулирования данными (DML) команды и Язык определения данных (DDL) команды. Команды DML имеют дело с данными, или получение этого или изменение этого, чтобы сохранить это актуальным. Команды DDL создают или изменяют таблицы и другие объекты базы данных, такие как представления, и индексирует.

Список более общих команд DML следует:

Более общие команды DDL следуют:

Наборы результатов и Курсоры

Строки, которые удовлетворяют условия запроса, вызывают набором результатов. Число строк, возвращенных в наборе результатов, может быть нулем, один, или многие. Пользователь может получить доступ к данным в наборе результатов одна строка за один раз, и курсор обеспечивает средства сделать это. Курсор может считаться указателем в файл, который содержит строки набора результатов, и у того указателя есть возможность отследить, из которых в настоящий момент получают доступ к строке. Курсор позволяет пользователю обрабатывать каждую строку набора результатов сверху донизу и следовательно может использоваться для итеративной обработки. Большинство DBMSs создает курсор автоматически, когда набор результатов сгенерирован.

Ранее добавленные новые возможности версий API JDBC курсора набора результатов, позволяя это переместить вперед обоих и назад и также позволяя это переместиться в указанную строку или в строку, позиция которой относительно другой строки.

См. Получение и Изменение Значений от Наборов результатов для получения дополнительной информации.

Транзакции

Когда один пользователь получает доступ к данным в базе данных, другой пользователь может получать доступ к тем же самым данным одновременно. Если, например, первый пользователь обновляет некоторые столбцы в таблице одновременно, второй пользователь выбирает столбцы из той же самой таблицы, для второго пользователя возможно получить частично старые данные и частично обновленные данные. Поэтому DBMSs используют транзакции, чтобы поддержать данные в непротиворечивом состоянии (непротиворечивость данных), разрешая больше чем одному пользователю получить доступ к базе данных одновременно (параллелизм данных).

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

Блокировка является механизмом, который мешает двум транзакциям управлять теми же самыми данными одновременно. Например, блокировка таблицы препятствует тому, чтобы таблица была отброшена, если есть незафиксированная транзакция на той таблице. В некотором DBMSs блокировка таблицы также блокирует все строки в таблице. Блокировка строки препятствует тому, чтобы две транзакции изменили ту же самую строку, или это препятствует тому, чтобы одна транзакция выбрала строку, в то время как другая транзакция все еще изменяет это.

См. Используя Транзакции для получения дополнительной информации.

Хранимые процедуры

Хранимая процедура является группой SQL-операторов, которые могут быть позваны по имени. Другими словами это - исполняемый код, минипрограмма, которая выполняет определенную задачу, которая может быть вызвана тем же самым путем, можно вызвать функцию или метод. Традиционно, хранимые процедуры были записаны в специфичном для DBMS языке программирования. Последняя генерация продуктов базы данных позволяет хранимым процедурам быть записанными, используя язык программирования Java и API JDBC. Хранимые процедуры, записанные в языке программирования Java, являются байт-кодом, переносимым между DBMSs. Как только хранимая процедура пишется, она может использоваться и снова использована, потому что DBMS, который поддерживает хранимые процедуры, поскольку его имя подразумевает, сохранит ее в базе данных. См. Используя Хранимые процедуры для информации о записи хранимых процедур.

Метаданные

Базы данных хранят пользовательские данные, и они также хранят информацию о базе данных непосредственно. У большинства DBMSs есть ряд системных таблиц, которые перечисляют таблицы в базе данных, имена столбцов в каждой таблице, первичных ключах, внешних ключах, хранимых процедурах, и т.д. У каждого DBMS есть свои собственные функции для того, чтобы получить информацию о табличных разметках и функциях базы данных. JDBC обеспечивает интерфейс DatabaseMetaData, который должен реализовать писатель драйвера так, чтобы его методы возвратили информацию о драйвере и/или DBMS, для которого пишется драйвер. Например, большое количество методов возвращаются, поддерживает ли драйвер определенную функциональность. Этот интерфейс дает пользователям и оснащает стандартизованный способ, чтобы получить метаданные. Вообще, инструменты записи разработчиков и драйверы - те наиболее вероятно, чтобы касаться метаданных.


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Архитектура JDBC
Следующая страница: Основы JDBC