Что такое отношение в терминологии базы данных? - PullRequest
16 голосов
/ 28 октября 2010

Когда кто-то ссылается на отношение в курсе базы данных, что это значит?

Ответы [ 8 ]

17 голосов
/ 28 октября 2010

Удивительно, но "отношение" в "реляционных" базах данных не ссылается на отношение внешнего ключа одной таблицы к другой. «Отношение - это структура данных, которая состоит из заголовка и неупорядоченного набора кортежей, имеющих один и тот же тип», согласно Википедии о «Отношение (база данных)» .

В СУБД SQL (таких как MS SQL Server и Oracle) таблицы представляют собой хранимые отношения, где имена столбцов, определенные в словаре данных, образуют «заголовок», а строки - «кортежи» отношения.

Тогда из таблицы запрос может вернуть другое отношение:

create table t (x number primary key, y number not null);

Table created.

SQL> insert into t values (1, 10);

1 row created.

SQL> insert into t values (2, 20);

1 row created.

SQL> select x from t;

         X
----------
         1
         2

select x from t вернул отношение с меньшим количеством столбцов, кортежей с меньшим количеством элементов, чем у базовой таблицы. И select x, y from t where x = 1 вернет отношение с меньшим количеством кортежей, чем базовая таблица:

SQL> select x, y from t where x = 1;

         X          Y
---------- ----------
         1         10

Пример использования внутреннего соединения:

SQL> create table s (x number primary key, words varchar2(100) not null);

Table created.

SQL> insert into s values (1, 'Hello World!');

1 row created.

SQL> insert into s values (3, 'Will not show');

1 row created.

SQL> select t.x, t.y, s.words
  2  from t
  3  inner join s
  4      on t.x = s.x;

         X          Y WORDS
---------- ---------- ---------------
         1         10 Hello World!

Концептуально, t inner join s on t.x = s.x проходит следующие шаги:

  1. Возьмите декартово произведение s и t, то есть каждый ряд s и объедините его с каждым рядом t, в результате чего получится кортеж с размером s * размер t кортежей или строк, каждый со всеми столбцами из s и t очень похож на результаты:

    SQL> select * from s, t;

         X WORDS                    X          Y
    

         3 Will not show            1         10
         3 Will not show            2         20
         1 Hello World!             1         10
         1 Hello World!             2         20
    

(или select * from s cross join t в синтаксисе SQL-92) Из декартового произведения, содержащего четыре кортежа / строки с четырьмя столбцами on s.x = t.x обрезает кортежи до одного, все еще с четырьмя столбцами:

SQL> select *
  2  from t
  3  inner join s
  4      on t.x = s.x;

         X          Y          X WORDS
---------- ---------- ---------- ---------------
         1         10          1 Hello World!

И select t.x, t.y, s.words сбрасывает один столбец отношения.

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

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

5 голосов
/ 03 января 2013

Проще говоря, «отношение» - это таблица, заголовок - это определение структуры, а строки - данные.

5 голосов
/ 29 октября 2010

Я вижу, что другие респонденты дают вам строгие определения того, что действительно можно назвать "отношением", и я не оспариваю их правильность.Однако в обычном использовании, когда кто-то ссылается на «отношение» в курсе базы данных, он ссылается на табличный набор данных, которые либо постоянно хранятся в базе данных (таблице), либо получены из таблиц в соответствии с математическим описанием (представление илирезультат запроса).

1 голос
/ 29 октября 2010

Эти статьи могут вас заинтересовать:

На простом английском: отношение - это данные в табличном формате с фиксированным числом столбцов и типом данных каждого столбца.

Это может быть таблица, представление, результат подзапроса или функция и т. Д.

1 голос
/ 29 октября 2010

Практически, «отношение» в реляционной модели можно рассматривать как «таблицу» в реальных продуктах СУБД (Oracle, SQL Server, MySQL и т. Д.), А «кортежи» в отношении также можно рассматривать как «строки»или «Записи» в таблице.Единственное различие между ними состоит в том, что Relation - это набор кортежей, а Table - пакет записей.Как набор, отношение запрещает повторяющиеся элементы (кортежи), и все кортежи в нем неупорядочены, но записи в таблице могут повторяться и всегда в определенной последовательности как для физического хранения, так и для чтения человеком.

И есть два похожих термина, которые часто вызывают путаницу и недопонимание в области базы данных.Обратите внимание на них: «Отношения» в E / R-модели и «Отношения» в реляционной модели абсолютно разные.При преобразовании E / R-модели в реляционную модель и сущности, и отношения в первом представляются ( с немного другой структурой ) как отношения (таблицы) во втором.И связь («ссылка» или «связь» также используется) между таблицами, фактически известная как внешний ключ, все еще отличается от связи между сущностями.

Точнее, вы можете захотеть различить связьи переменная отношения (relvar).Отношение - это абстрактная структура, которая содержит набор атрибутов, а relvar - это статус набора данных в определенный момент этого отношения.Первый может рассматриваться как определение таблицы со столбцами, а второй - набор данных в этой таблице.(Подумайте о типе против переменной в C или любом другом процедурном языке программирования и о классе против объекта в ООП.)

Ниже приведены соответствующие термины между теорией отношений и практикой баз данных:

Relation             <-->  Table
Tuple                <-->  Record, Row
Attribute            <-->  Column, Field
Domain of attribute  <-->  Datatype of column
1 голос
/ 28 октября 2010

Здесь пока четыре ответа, и все они одинаковы, и все неверны.Термин «реляционный» относится к тому факту, что записи в таблице моделируют математическое отношение.

0 голосов
/ 14 ноября 2013

Отношение - это набор уникальных кортежей, где кортеж состоит из значения идентификатора сущности, которое связано (идентифицирует) один или несколько атрибутов.Это НЕ таблица, которая является совершенно другим уровнем (реализация, а не дизайн).

Я не могу сделать это определение короче, не исключая что-то, но оно настолько короткое, что это просто списокусловий.Если я сделаю это дольше, я, вероятно, запутаю основной смысл: «Что означает слово отношение в этом контексте? Что связано? »

0 голосов
/ 23 июля 2012

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

Почему таблица называется отношением? Короче говоря, потому что все значения в таблице могут быть определены отношением в смысле теории множеств.

Таблица содержит набор данных. Все элементы в наборе определяются отношением. В теории множеств отношения часто обозначают xRy, где x связано с y отношением R. Например, (2) R (-2), где отношение R равно x, является отрицательным значением y. Множество всех отрицательных чисел определяется этим соотношением R, где доменом являются все положительные числа, а диапазоном являются все отрицательные числа.

Мы также могли бы иметь бинарное отношение: ('Boston') R (American Cities), где отношение R определено как x, может быть определено как y.

Мы могли бы также иметь бинарное отношение: ('Mango') R (Fruit), где отношение R определяется как x - это тип пищи. Итак, x - это значение в области (вход) отношения, а y - это значение в диапазоне (выход) отношения.

Таблица базы данных всех граждан в Нью-Йорке может быть представлена ​​как

Citizen(Social_Security_Number, Name, Home_Address).

Здесь отношение в смысле теории множеств - xRy, где отношение R определяется как x - гражданин, проживающий в y, где мы определяем y как Нью-Йорк.

Запрос также может возвращать новое отношение (то есть он возвращает набор данных, определенный новым отношением). Если мы хотим запросить базу данных, чтобы найти всех граждан с фамилией «Перроне», мы бы определили наш набор результатов на основе другого отношения xRy, а именно, x - гражданин, проживающий в Нью-Йорке с фамилией, y, где мы определяем y как «Перроне».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...