Spec-Zone .ru
спецификации, руководства, описания, API
|
База данных является средством того, чтобы хранить информацию таким способом, которым информация может быть получена от этого. В самых простых сроках реляционная база данных является той, которая представляет информацию в таблицах со строками и столбцами. Таблица упоминается как отношение в том смысле, что это - набор объектов того же самого типа (строки). Данные в таблице могут быть связаны согласно общим ключам или понятиям, и возможность получить связанные данные от таблицы является основанием для термина реляционная база данных. Система управления базами данных (DBMS) обрабатывает способ, которым данные сохранены, сохраняются, и получаются. В случае реляционной базы данных Система управления реляционными базами данных (RDBMS) выполняет эти задачи. DBMS как использующийся в этой книге является общим термином, который включает RDBMS.
Реляционные таблицы следуют за определенными правилами целостности гарантировать, что данные, которые они содержат, остаются точными и всегда доступны. Во-первых, строки в реляционной таблице должны все быть отличными. Если есть дублирующиеся строки, могут быть проблемы, решающие, какой из двух возможных выборов является корректным. Для большинства DBMSs пользователь может определить, что дублирующиеся строки не позволяются, и если это будет сделано, то DBMS предотвратит добавление любых строк, которые копируют существующую строку.
Второе правило целостности традиционной реляционной модели состоит в том, что значения столбцов не должны повторять группы или массивы. Третий аспект целостности данных включает понятие нулевого значения. База данных заботится о ситуациях, где данные, возможно, не доступны при использовании нулевого значения, чтобы указать, что значение отсутствует. Это не приравнивается к пробелу или нулю. Пробел считают равным другому пробелу, нуль равен другому нулю, но два нулевых значения не считают равными.
Когда каждая строка в таблице отличается, возможно использовать один или более столбцов, чтобы идентифицировать определенную строку. Этот уникальный столбец или группу столбцов вызывают первичным ключом. Любой столбец, который является частью первичного ключа, не может быть нулем; если бы это было, то первичный ключ, содержащий это, больше не был бы полным идентификатором. Это правило упоминается как объектная целостность.
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
:
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 делятся на категории, два основных, являющиеся Языком манипулирования данными (DML) команды и Язык определения данных (DDL) команды. Команды DML имеют дело с данными, или получение этого или изменение этого, чтобы сохранить это актуальным. Команды DDL создают или изменяют таблицы и другие объекты базы данных, такие как представления, и индексирует.
Список более общих команд DML следует:
SELECT —
используемый, чтобы запросить и вывести на экран данные от базы данных. SELECT
оператор определяет который столбцы включать в набор результатов. Огромное большинство команд SQL, используемых в приложениях, SELECT
операторы.
INSERT —
добавляют новые строки к таблице. INSERT
используется, чтобы заполнить недавно составленную таблицу или добавить новую строку (или строки) к уже существующей таблице.
DELETE —
удаляет указанную строку или набор строк от таблицы
UPDATE —
изменяет существующее значение в столбце или группе столбцов в таблице
Более общие команды DDL следуют:
CREATE TABLE —
составляет таблицу с именами столбцов, которые обеспечивает пользователь. Пользователь также должен определить тип для данных в каждом столбце. Типы данных изменяются от одного RDBMS до другого, таким образом, пользователь, возможно, должен был бы использовать метаданные, чтобы установить типы данных, используемые определенной базой данных. CREATE TABLE
обычно используется менее часто чем команды манипулирования данными, потому что таблица составляется только однажды, тогда как добавление или удаление строк или изменение отдельных значений обычно происходят более часто.
DROP TABLE —
удаляет все строки и удаляет табличное определение из базы данных. Реализация API JDBC обязана поддерживать команду DROP TABLE как определено SQL92, Транзитным Уровнем. Однако, поддержка CASCADE
и RESTRICT
опции DROP TABLE
является дополнительным. Кроме того, поведение DROP TABLE
определяется с помощью реализации, когда есть представления или ограничения целостности, определенные что ссылка отбрасываемая таблица.
ALTER TABLE —
добавляет или удаляет столбец из таблицы. Это также добавляет или отбрасывает табличные ограничения и изменяет атрибуты столбца
Строки, которые удовлетворяют условия запроса, вызывают набором результатов. Число строк, возвращенных в наборе результатов, может быть нулем, один, или многие. Пользователь может получить доступ к данным в наборе результатов одна строка за один раз, и курсор обеспечивает средства сделать это. Курсор может считаться указателем в файл, который содержит строки набора результатов, и у того указателя есть возможность отследить, из которых в настоящий момент получают доступ к строке. Курсор позволяет пользователю обрабатывать каждую строку набора результатов сверху донизу и следовательно может использоваться для итеративной обработки. Большинство DBMSs создает курсор автоматически, когда набор результатов сгенерирован.
Ранее добавленные новые возможности версий API JDBC курсора набора результатов, позволяя это переместить вперед обоих и назад и также позволяя это переместиться в указанную строку или в строку, позиция которой относительно другой строки.
См. Получение и Изменение Значений от Наборов результатов для получения дополнительной информации.
Когда один пользователь получает доступ к данным в базе данных, другой пользователь может получать доступ к тем же самым данным одновременно. Если, например, первый пользователь обновляет некоторые столбцы в таблице одновременно, второй пользователь выбирает столбцы из той же самой таблицы, для второго пользователя возможно получить частично старые данные и частично обновленные данные. Поэтому DBMSs используют транзакции, чтобы поддержать данные в непротиворечивом состоянии (непротиворечивость данных), разрешая больше чем одному пользователю получить доступ к базе данных одновременно (параллелизм данных).
Транзакция является рядом той или большего количества SQL-операторов, которые составляют логическую единицу работы. Транзакция заканчивается или фиксацией или откатом в зависимости от того, есть ли какие-либо проблемы с параллелизмом данных или непротиворечивостью данных. Оператор фиксации делает постоянным изменения, следующие из SQL-операторов в транзакции, и оператор отката отменяет все изменения, следующие из SQL-операторов в транзакции.
Блокировка является механизмом, который мешает двум транзакциям управлять теми же самыми данными одновременно. Например, блокировка таблицы препятствует тому, чтобы таблица была отброшена, если есть незафиксированная транзакция на той таблице. В некотором DBMSs блокировка таблицы также блокирует все строки в таблице. Блокировка строки препятствует тому, чтобы две транзакции изменили ту же самую строку, или это препятствует тому, чтобы одна транзакция выбрала строку, в то время как другая транзакция все еще изменяет это.
См. Используя Транзакции для получения дополнительной информации.
Хранимая процедура является группой SQL-операторов, которые могут быть позваны по имени. Другими словами это - исполняемый код, минипрограмма, которая выполняет определенную задачу, которая может быть вызвана тем же самым путем, можно вызвать функцию или метод. Традиционно, хранимые процедуры были записаны в специфичном для DBMS языке программирования. Последняя генерация продуктов базы данных позволяет хранимым процедурам быть записанными, используя язык программирования Java и API JDBC. Хранимые процедуры, записанные в языке программирования Java, являются байт-кодом, переносимым между DBMSs. Как только хранимая процедура пишется, она может использоваться и снова использована, потому что DBMS, который поддерживает хранимые процедуры, поскольку его имя подразумевает, сохранит ее в базе данных. См. Используя Хранимые процедуры для информации о записи хранимых процедур.
Базы данных хранят пользовательские данные, и они также хранят информацию о базе данных непосредственно. У большинства DBMSs есть ряд системных таблиц, которые перечисляют таблицы в базе данных, имена столбцов в каждой таблице, первичных ключах, внешних ключах, хранимых процедурах, и т.д. У каждого DBMS есть свои собственные функции для того, чтобы получить информацию о табличных разметках и функциях базы данных. JDBC обеспечивает интерфейс DatabaseMetaData
, который должен реализовать писатель драйвера так, чтобы его методы возвратили информацию о драйвере и/или DBMS, для которого пишется драйвер. Например, большое количество методов возвращаются, поддерживает ли драйвер определенную функциональность. Этот интерфейс дает пользователям и оснащает стандартизованный способ, чтобы получить метаданные. Вообще, инструменты записи разработчиков и драйверы - те наиболее вероятно, чтобы касаться метаданных.