Читать в оригинале

<< ПредыдущаяОглавлениеСледующая >>


5.2 Псевдостолбец ROWID

Псевдостолбцами в Oracle принято называть столбцы, которые отсут­ствуют в таблицах в явном виде, но могут быть использованы в запросах.

Наиболее употребимым и важным из них является ROWID — псевдостол­бец, являющийся уникальным идентификатором строки. Он не просто га­рантированно уникален в рамках таблицы — более того: он уникален в рамках базы данных. С физической точки зрения ROWID является свое­образной координатой записи в базе.

Необходимо отметить, что существование ROWID противоречит как минимум двум из двенадцати известных правил Кодда, описывающих тре­бования к реляционной СУБД. Во-первых, ROWID нарушает правило но­мер 2, которое гласит: «К каждому элементу данных должен быть обес­печен доступ при помощи комбинации имени таблицы, первичного ключа строки и имени столбца». В данном случае ROWID не является первич­ным ключом, хотя ввиду его уникальности для каждой строки он может выступать в роли первичного ключа.

Во-вторых, нарушается правило Кодда номер 8: «Прикладные програм­мы не должны зависеть от используемых способов хранения данных на носителях и методов обращения к ним». Нарушение этого правила про­исходит из-за того, что ROWID по своей сути является физической ко­ординатой записи, поэтому он будет изменяться в случае пересоздания таблицы, перезагрузки данных, перемещения таблицы из одного таблич­ного пространства в другое и т.п. Однако ROWID уникален и неизменен в течение сеанса пользователя, поэтому приложение может считать его неизменным.

ROWID существенно упрощает работу с базой данных, поскольку поз­воляет однозначно идентифицировать любую строку таблицы, что, в част­ности, позволяет удалять и редактировать строки таблиц без первичного ключа. Кроме того, поиск строки по ее ROWID является самым быстрым из возможных, что положительно сказывается на быстродействии прило­жений, активно модифицирующих данные. Однако ROWID является спе­цифической особенностью Oracle, а следовательно, его нельзя применять при разработке приложений, рассчитанных на работу с базами других ти­пов.

Рассмотрим простейший пример запроса, извлекающего ROWID строк:

SELECT ROWID, Name FROM ARTIST;



<< ПредыдущаяОглавлениеСледующая >>