Реляционные базы данных

Apache Cassandra

Apache Cassandra is a commonly used, high-performance nonrelational database. AWS customers who currently maintain Cassandra on-premises may want to take advantage of the scalability, reliability, security, and economic benefits of running Cassandra on Amazon EC2.

EC2 and Amazon Elastic Block Store (Amazon EBS) provide secure, resizable compute capacity and storage in the AWS Cloud. When combined, you can deploy Cassandra and scale capacity according to your requirements. Given the number of possible deployment topologies, it’s not always trivial to select the most appropriate strategy suitable for your use case. Use Best Practices for Running Apache Cassandra on Amazon EC2 to deploy Apache Cassandra in the AWS Cloud.

DataStax Enterprise (DSE) is the always-on data platform for cloud applications powered by Apache Cassandra. DSE is designed to handle big data workloads across multiple nodes with no single point of failure. DSE addresses the problem of failures by employing a peer-to-peer distributed system across homogeneous nodes where data is distributed among all nodes in the cluster. DSE offers advanced functionality designed to accelerate your ability to create intelligent and compelling cloud applications. Integrated within each node of DSE are powerful indexing, search, analytics, and graph functionalities that are provided by combining Cassandra with Apache Solr, Apache Spark, and DSE Graph. You can write data once and access it using a variety of workloads or access patterns, all from a single cohesive solution.

Use the AWS DataStax Enterprise Quick Start (also available in PDF format) to deploy a DSE cluster in the AWS Cloud.

Внешние ключи FOREIGN KEY

Последнее обновление: 27.04.2019

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

Общий синтаксис установки внешнего ключа на уровне таблицы:

FOREIGN KEY (столбец1, столбец2, ... столбецN) 
REFERENCES главная_таблица (столбец_главной_таблицы1, столбец_главной_таблицы2, ... столбец_главной_таблицыN)


Для создания ограничения внешнего ключа после FOREIGN KEY указывается столбец таблицы, который будет представляет
внешний ключ. А после ключевого слова REFERENCES указывается имя
связанной таблицы, а затем в скобках имя связанного столбца, на который будет указывать внешний ключ. После выражения REFERENCES
идут выражения ON DELETE и ON UPDATE, которые задают действие при удалении и обновлении строки из
главной таблицы соответственно.

Например, определим две таблицы и свяжем их посредством внешнего ключа:

CREATE TABLE Customers
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    Age INT, 
    FirstName VARCHAR(20) NOT NULL,
    LastName VARCHAR(20) NOT NULL,
    Phone VARCHAR(20) NOT NULL UNIQUE
);

CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    FOREIGN KEY (CustomerId)  REFERENCES Customers (Id)
);

В данном случае определены таблицы Customers и Orders. Customers является главной и представляет клиента. Orders является зависимой и
представляет заказ, сделанный клиентом. Таблица Orders через столбец CustomerId связана с таблицей Customers и ее столбцом Id. То есть столбец
CustomerId является внешним ключом, который указывает на столбец Id из таблицы Customers.

С помощью оператора CONSTRAINT можно задать имя для ограничения внешнего ключа:

CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    CONSTRAINT orders_custonmers_fk 
    FOREIGN KEY (CustomerId)  REFERENCES Customers (Id)
);

ON DELETE и ON UPDATE

С помощью выражений ON DELETE и ON UPDATE можно установить действия, которые выполняются
соответственно при удалении и изменении связанной строки из главной таблицы. В качестве действия могут использоваться следующие опции:

  • CASCADE: автоматически удаляет или изменяет строки из зависимой таблицы при удалении или изменении связанных строк в главной таблице.
  • SET NULL: при удалении или обновлении связанной строки из главной таблицы устанавливает для столбца внешнего ключа
    значение NULL. (В этом случае столбец внешнего ключа должен поддерживать установку NULL)
  • RESTRICT: отклоняет удаление или изменение строк в главной таблице при наличии связанных строк в зависимой таблице.
  • NO ACTION: то же самое, что и .
  • SET DEFAULT: при удалении связанной строки из главной таблицы устанавливает для столбца внешнего ключа значение по
    умолчанию, которое задается с помощью атрибуты DEFAULT. Несмотря на то, что данная опция в принципе доступна, однако движок InnoDB не поддерживает данное выражение.

Каскадное удаление

Каскадное удаление позволяет при удалении строки из главной таблицы автоматически удалить все связанные строки из зависимой таблицы.
Для этого применяется опция CASCADE:

CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE CASCADE
);

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

Установка NULL

При установки для внешнего ключа опции SET NULL необходимо, чтобы столбец внешнего ключа допускал значение NULL:

CREATE TABLE Orders
(
    Id INT PRIMARY KEY AUTO_INCREMENT,
    CustomerId INT,
    CreatedAt Date,
    FOREIGN KEY (CustomerId) REFERENCES Customers (Id) ON DELETE SET NULL
);

НазадВперед

Нормализация таблиц при проектировании БД

При проектировании структуры
новой БД определяют сущности (объекты,
явления) предметной области, которые должны
найти свое отражение в базе данных. В
конечном итоге анализ предметной области
должен привести к созданию эскиза БД.
Сначала желательно изобразить сущности
и связи между ними. Как правило, каждой
сущности в БД соответствует таблица.
Затем — в эскизе второго порядка — для каждой
таблицы БД приводится список атрибутов
полей записи.

На этом этапе процесс
проектирования структур БД является
процессом творческим, неоднозначным, с
другой стороны, узловые его моменты могут
быть формализованы.

Одной из таких формализаций
является требование, согласно которому
реляционная база данных должна быть
нормализована. Процесснормализации имеет своей целью
устранение избыточности данных и
заключается в приведении к третьей
нормальной форме (3НФ).

Первая нормальная форма (1НФ)
требует, чтобы каждое поле таблицы БД:

·было неделимым;

·не содержало повторяющихся групп.

Неделимость поля означает, что
значение поля не должно делиться на более
мелкие значения. Например, если в поле «Подразделение»
содержится название факультета и название
кафедры, требование неделимости не
соблюдается и необходимо из данного поля
выделить или название факультета, или
кафедры в отдельное поле.

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

Вторая
нормальная форма (2НФ)
требует, чтобы все
поля таблицы зависели от первичного ключа,
то есть, чтобы первичный ключ однозначно
определял запись и не был избыточен. Те поля,
которые зависят только от части первичного
ключа, должны быть выделены в составе
отдельных таблиц.

Третья
нормальная форма
(ЗНФ) требует, чтобы
значение любого поля таблицы, не входящего
в первичный ключ, не зависело от значения
другого поля, не входящего в первичный ключ.

Пример логической модели базы
данных «Сессия»

Создание внешнего ключа в новой таблицеCreate a foreign key in a new table

Использование Transact-SQLUsing Transact-SQL

В следующем примере создается таблица и определяется ограничение внешнего ключа для столбца , ссылающегося на столбец в таблице базы данных AdventureWorks.The following example creates a table and defines a foreign key constraint on the column that references the column in the table in the AdventureWorks database. Предложения ON DELETE CASCADE и ON UPDATE CASCADE используются для обеспечения распространения изменений, вносимых в таблицу на таблицу .The ON DELETE CASCADE and ON UPDATE CASCADE clauses are used to ensure that changes made to table are automatically propagated to the table.

Что такое СУБД?

Современные авторы часто употребляют термины «банк данных» и «база данных»
как синонимы, однако в общеотраслевых руководящих материалах по созданию банков
данных Государственного комитета по науке и технике (ГКНТ), изданных в 1982
г., эти понятия различаются. Там приводятся следующие определения банка данных,
базы данных и СУБД:


Банк данных

это система специальным образом организованных данных — баз данных,
программных, технических, языковых, организационно-методических средств, предназначенных
для обеспечения централизованного накопления и коллективного многоцелевого использования
данных.


База данных, БД

именованная совокупность данных, отражающая состояние объектов и их отношений
в рассматриваемой предметной области.


Система управления базами данных, СУБД

совокупность языковых и программных средств, предназначенных
для создания, ведения и совместного использования БД многими пользователями.

Создание файла базы данных

При запуске Access открывается диалоговое окно — Окно запуска, в котором
предлагается создать новую БД, запустить Мастера БД или открыть существую­щую
БД.

В Access поддерживаются два способа создания БД.
Можно создать пустой файл БД, а затем разрабатывать таблицы, формы, отчеты и
другие объекты, добав­ляя их в БД. Такой способ является профессиональным и
наиболее гибким, но тре­бует отдельного определения каждого элемента БД. При
выборе такого способа создания БД надо в окне запуска установить флажок Новая
база данных.
В рас­крывшемся окне Файл новой базы данных следует
выбрать каталог и задать имя создаваемой БД. Раскроется Окно базы данных.

Вниманию студентов! Студенческие БД должны создаваться в
директории StudentGRNNN.

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

Флажок  Открыть базу данных окна
запуска позволяет открыть ранее

созданную БД, выбрав ее имя из
предлагаемого списка. При выборе Другие файлы предоставляется
каталог, из которого можно открыть нужную БД.

Session store

A session-oriented application such as a web application starts a session when a user logs in and is active until the user logs out or the session times out. During this period, the application stores all session-related data either in the main memory or in a database. Session data may include user profile information, messages, personalized data and themes, recommendations, targeted promotions, and discounts. Each user session has a unique identifier. Session data is never queried by anything other than a primary key, so a fast key-value store is a better fit for session data. In general, key-value databases may provide smaller per-page overhead than relational databases.

Join types

There are three join types. You can see them in the following screen shot:

Option 1 defines an inner join. An inner join is a join in which records from two tables are combined in a query’s results only if values in the joined fields meet a specified condition. In a query, the default join is an inner join that selects records only if values in the joined fields match.

Option 2 defines a left outer join. A left outer join is a join in which all the records from the left side of the LEFT JOIN operation in the query’s SQL statement are added to the query’s results, even if there are no matching values in the joined field from the table on the right side.

How to define relationships between tables

When you create a relationship between tables, the related fields do not have to have the same names. However, related fields must have the same data type unless the primary key field is an AutoNumber field. You can match an AutoNumber field with a Number field only if theFieldSizeproperty of both of the matching fields is the same. For example, you can match an AutoNumber field and a Number field if theFieldSizeproperty of both fields isLong Integer. Even when both matching fields are Number fields, they must have the sameFieldSizeproperty setting.

How to define a one-to-many or one-to-one relationship

To create a one-to-many or a one-to-one relationship, follow these steps:

  1. Close all tables. You cannot create or change relationships between open tables.
  2. In Access 2002 or Access 2003, follow these steps:
    1. Press F11 to switch to the Database window.
    2. On the Tools menu, click Relationships.

    In Access 2007, Access 2010, or Access 2013, click Relationships in the Show/Hide group on the Database Tools tab.

  3. If you have not yet defined any relationships in your database, the Show Table dialog box is automatically displayed. If you want to add the tables that you want to relate but the Show Table dialog box does not appear, click Show Table on the Relationships menu.
  4. Double-click the names of the tables that you want to relate, and then close the Show Table dialog box. To create a relationship between a table and itself, add that table two times.
  5. Drag the field that you want to relate from one table to the related field in the other table. To drag multiple fields, press Ctrl, click each field, and then drag them.

    In most cases, you drag the primary key field (this field is displayed in bold text) from one table to a similar field (this field frequently has the same name) that is called the foreign key in the other table.

  6. The Edit Relationships dialog box appears. Make sure that the field names that are displayed in the two columns are correct. You can change the names if it is necessary.

    Set the relationship options if it is necessary. If you have to have information about a specific item in the Edit Relationships dialog box, click the question mark button, and then click the item. (These options will be explained in detail later in this article.)

  7. Click Create to create the relationship.
  8. Repeat steps 4 through 7 for each pair of tables that you want to relate.

    When you close the Edit Relationships dialog box, Access asks whether you want to save the layout. Whether you save the layout or do not save the layout, the relationships that you create are saved in the database.

    Note

    You can create relationships not only in tables but also in queries. However, referential integrity is not enforced with queries.

How to define a many-to-many relationship

To create a many-to-many relationship, follow these steps:

  1. Create the two tables that will have a many-to-many relationship.
  2. Create a third table. This is the junction table. In the junction table, add new fields that have the same definitions as the primary key fields from each table that you created in step 1. In the junction table, the primary key fields function as foreign keys. You can add other fields to the junction table, just as you can to any other table.
  3. In the junction table, set the primary key to include the primary key fields from the other two tables. For example, in a «TitleAuthors» junction table, the primary key would be made up of the OrderID and ProductID fields.

    Note

    To create a primary key, follow these steps:

    1. Open a table in Design view.
    2. Select the field or fields that you want to define as the primary key. To select one field, click the row selector for the desired field. To select multiple fields, hold down the Ctrl key, and then click the row selector for each field.
    3. In Access 2002 or in Access 2003, click Primary Key on the toolbar.

      In Access 2007, click Primary Key in the Tools group on the Design tab.

      Note

      If you want the order of the fields in a multiple-field primary key to differ from the order of those fields in the table, click Indexes on the toolbar to display the Indexes dialog box, and then reorder the field names for the index named PrimaryKey.

  4. Define a one-to-many relationship between each primary table and the junction table.

Amazon DynamoDB

Amazon DynamoDB is a nonrelational database that delivers reliable performance at any scale. It’s a fully managed, multi-region, multi-master database that provides consistent single-digit millisecond latency, and offers built-in security, backup and restore, and in-memory caching. In DynamoDB, an Item is composed of a primary or composite key and a flexible number of attributes. There is no explicit limitation on the number of attributes associated with an individual item, but the aggregate size of an item, including all the attribute names and attribute values, cannot exceed 400 KB. A table is a collection of data items, just as a table in a relational database is a collection of rows. Each table can have an infinite number of data items.

You can be up and running with DynamoDB in 10 minutes with this step-by-step tutorial. Learn more about DynamoDB and get started today.

What is Amazon DynamoDB?

лМБУУЙЖЙЛБГЙС

рТПУФЩЕ Й УПУФБЧОЩЕ ЛМАЮЙ

рЕТЧЙЮОЩК ЛМАЮ НПЦЕФ УПУФПСФШ ЙЪ ЕДЙОУФЧЕООПЗП РПМС ФБВМЙГЩ, ЪОБЮЕОЙС ЛПФПТПЗП ХОЙЛБМШОЩ ДМС ЛБЦДПК ЪБРЙУЙ. фБЛ, ОБРТЙНЕТ, ОБ РТЕДРТЙСФЙЙ ОЕ НПЦЕФ ВЩФШ ДЧХИ ТБВПФОЙЛПЧ У ПДЙОБЛПЧЩНЙ ФБВЕМШОЩНЙ ОПНЕТБНЙ, РПЬФПНХ Ч ФБВМЙГЕ, УПДЕТЦБЭЕК ЪБРЙУЙ П ТБВПФОЙЛБИ, ФБВЕМШОЩК ОПНЕТ НПЦЕФ ВЩФШ РЕТЧЙЮОЩН ЛМАЮПН. фБЛПК РЕТЧЙЮОЩК ЛМАЮ ОБЪЩЧБАФ РТПУФЩН ЛМАЮПН.

еУМЙ ФБВМЙГБ ОЕ ЙНЕЕФ ЕДЙОУФЧЕООПЗП ХОЙЛБМШОПЗП РПМС, РЕТЧЙЮОЩК ЛМАЮ НПЦЕФ ВЩФШ УПУФБЧМЕО ЙЪ ОЕУЛПМШЛЙИ РПМЕК, УПЧПЛХРОПУФШ ЪОБЮЕОЙК ЛПФПТЩИ ЗБТБОФЙТХЕФ ХОЙЛБМШОПУФШ. фБЛ, ЙНС, ЖБНЙМЙС, ПФЮЕУФЧП, ОПНЕТ РБУРПТФБ, УЕТЙС РБУРПТФБ ОЕ НПЗХФ ВЩФШ РЕТЧЙЮОЩНЙ ЛМАЮБНЙ РП ПФДЕМШОПУФЙ, ФБЛ ЛБЛ НПЗХФ ПЛБЪБФШУС ПДЙОБЛПЧЩНЙ Х ДЧХИ Й ВПМЕЕ МАДЕК. оП ОЕ ВЩЧБЕФ ДЧХИ МЙЮОЩИ ДПЛХНЕОФПЧ ПДОПЗП ФЙРБ У ПДЙОБЛПЧЩНЙ УЕТЙЕК Й ОПНЕТПН. рПЬФПНХ Ч ФБВМЙГЕ, УПДЕТЦБЭЕК ЪБРЙУЙ П МАДСИ, РЕТЧЙЮОЩН ЛМАЮПН НПЦЕФ ВЩФШ ОБВПТ РПМЕК, УПУФПСЭЙК ЙЪ ФЙРБ МЙЮОПЗП ДПЛХНЕОФБ, ЕЗП УЕТЙЙ Й ОПНЕТБ. фБЛПК РЕТЧЙЮОЩК ЛМАЮ ОБЪЩЧБАФ УПУФБЧОЩН ЛМАЮПН (БОЗМ. compound key, composite key, concatenated key).

еУФЕУФЧЕООЩЕ Й УХТТПЗБФОЩЕ ЛМАЮЙ

рЕТЧЙЮОЩК ЛМАЮ НПЦЕФ УПУФПСФШ ЙЪ ЙОЖПТНБГЙПООЩИ РПМЕК ФБВМЙГЩ (ФП ЕУФШ РПМЕК, УПДЕТЦБЭЙИ РПМЕЪОХА ЙОЖПТНБГЙА ПВ ПРЙУЩЧБЕНЩИ ПВЯЕЛФБИ). фБЛПК РЕТЧЙЮОЩК ЛМАЮ ОБЪЩЧБАФ ЕУФЕУФЧЕООЩН ЛМАЮПН. фЕПТЕФЙЮЕУЛЙ, ЕУФЕУФЧЕООЩК ЛМАЮ ЧУЕЗДБ НПЦОП УЖПТНЙТПЧБФШ, Ч ЬФПН УМХЮБЕ НЩ РПМХЮЙН Ф. О. ЙОФЕММЕЛФХБМШОЩК ЛМАЮ. оБ РТБЛФЙЛЕ, ПДОБЛП, ЙУРПМШЪПЧБОЙЕ ЕУФЕУФЧЕООЩИ ЛМАЮЕК ОБФБМЛЙЧБЕФУС ОБ ПРТЕДЕМЈООЩЕ УМПЦОПУФЙ:

  • оЙЪЛБС ЬЖЖЕЛФЙЧОПУФШ — еУФЕУФЧЕООЩК ЛМАЮ НПЦЕФ ВЩФШ ЧЕМЙЛ РП ТБЪНЕТХ (ПУПВЕООП ЛПЗДБ ПО УПУФБЧОПК), Й ЕЗП ЙУРПМШЪПЧБОЙЕ ПЛБЦЕФУС ФЕИОЙЮЕУЛЙ ОЕЬЖЖЕЛФЙЧОЩН (ЧЕДШ ЧП ЧУЕИ ФБВМЙГБИ, УЧСЪБООЩИ У ДБООПК, РПОБДПВЙФУС УПЪДБФШ РПМЕ ФПЗП ЦЕ ТБЪНЕТБ, ЮФПВЩ ИТБОЙФШ УУЩМЛЙ).
  • оЕПВИПДЙНПУФШ ЛБУЛБДОЩИ ЙЪНЕОЕОЙК — рТЙ ЙЪНЕОЕОЙЙ ЪОБЮЕОЙС РПМС, ЧИПДСЭЕЗП Ч ЕУФЕУФЧЕООЩК ЛМАЮ, ПЛБЪЩЧБЕФУС ОЕПВИПДЙНЩН ЙЪНЕОЙФШ ЪОБЮЕОЙЕ РПМС ОЕ ФПМШЛП Ч ДБООПК ФБВМЙГЕ, ОП Й ЧП ЧУЕИ ФБВМЙГБИ, УЧСЪБООЩИ У ДБООПК, Ч РТПФЙЧОПН УМХЮБЕ ЧУЕ УУЩМЛЙ ОБ ДБООХА ЪБРЙУШ ПЛБЦХФУС ОЕЛПТТЕЛФОЩНЙ. ч УМПЦОЩИ ВБЪБИ ДБООЩИ ФБЛЙИ УЧСЪБООЩИ ФБВМЙГ НПЦЕФ ВЩФШ ПЮЕОШ НОПЗП, Й ЧУЕЗДБ ПУФБЈФУС ПРБУОПУФШ ХРХУФЙФШ ЙЪ ЧЙДХ ЛБЛХА-ФП ЙЪ ОЙИ. рТЙ ДПВБЧМЕОЙЙ ОПЧЩИ УЧСЪБООЩИ ФБВМЙГ РТЙИПДЙФУС ДПВБЧМСФШ УПЗМБУХАЭЙЕ ЙЪНЕОЕОЙС ЧП ЧУЕ НЕУФБ РТПЗТБНН, ЗДЕ РТБЧЙФУС ЙУИПДОБС ФБВМЙГБ.
  • оЕУППФЧЕФУФЧЙЕ ТЕБМШОПУФЙ — хОЙЛБМШОПУФШ ЕУФЕУФЧЕООПЗП РЕТЧЙЮОПЗП ЛМАЮБ Ч ТЕБМШОЩИ вд ОЕ ЧУЕЗДБ УПВМАДБЕФУС. дПРХУФЙН, ОБРТЙНЕТ, ЮФП РЕТЧЙЮОЩК ЛМАЮ Ч ФБВМЙГЕ — ДБООЩЕ МЙЮОПЗП ДПЛХНЕОФБ. ч ФБЛХА ФБВМЙГХ ПЛБЦЕФУС ОЕЧПЪНПЦОЩН ЧОЕУФЙ ЮЕМПЧЕЛБ, П ДПЛХНЕОФБИ ЛПФПТПЗП ОЕФ ЙОЖПТНБГЙЙ Ч НПНЕОФ ДПВБЧМЕОЙС ЪБРЙУЙ, Б ОБ РТБЛФЙЛЕ ФБЛБС ОЕПВИПДЙНПУФШ НПЦЕФ ЧПЪОЙЛОХФШ.

чУМЕДУФЧЙЕ ЬФЙИ Й ДТХЗЙИ УППВТБЦЕОЙК Ч РТБЛФЙЛЕ РТПЕЛФЙТПЧБОЙС вд ЮБЭЕ ЙУРПМШЪХАФ Ф. О. УЙОФЕФЙЮЕУЛЙЕ (УХТТПЗБФОЩЕ) ЛМАЮЙ — ЙУЛХУУФЧЕООП УПЪДБООЩЕ ФЕИОЙЮЕУЛЙЕ ЛМАЮЕЧЩЕ РПМС, ОЕ ОЕУХЭЙЕ ЙОЖПТНБГЙЙ ПВ ПВЯЕЛФБИ.

нБФЕТЙБМ ЙЪ ЧЙЛЙРЕДЙЙ — УЧПВПДОПК ЬОГЙЛМПРЕДЙЙ
тБЪДЕМ: фЕПТЕФЙЮЕУЛЙЕ ПУОПЧЩ ВБЪ ДБООЩИ • ухвд

Ключи

Последнее обновление: 02.07.2017

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

Суперключ

Superkey (суперключ) — комбинация атрибутов (столбцов), которые уникально идентифицируют каждую строку таблицы. Это могут быть и все столбцы, и
несколько и и один. При этом строки, которые содержат значения этих атрибутов, не должны повторяться.

Например, у нас есть сущность Student, которая представляет данные о пользователях и которая имеет следующие атрибуты:

  • FirstName (имя)
  • LastName (фамилия)
  • Year (год рождения)
  • Phone (номер телефона)

Какие атрибуты в данном случае могут составлять суперключ:

  • {FirstName, LastName, Year, Phone}
  • {FirstName, Year, Phone}
  • {LastName, Year, Phone}
  • {FirstName, Phone}
  • {LastName, Phone}
  • {Year, Phone}
  • {Phone}

Каждого студента уникально может идентифицировать телефонный номер, поэтому любые наборы, в которых встречается атрибут Phone, представляют суперключ.

А вот, к примеру, набор не является суперключом, так как у нас теоретически могут быть как минимум
два студента с одинаковыми именем, фамилией и годом рождения.

Потенциальный ключ

Candidate key (потенциальный ключ) — представляет собой минимальный суперключ отношения (таблицы), то есть набор атрибутов, который удовлетворяет ряду условий:

  • Неприводимость: он не может быть сокращен, он содержит минимально возможный набор атрибутов
  • Уникальность: он должен иметь уникальные значения вне зависимости от изменения строки
  • Наличие значения: он не должен иметь значения NULL, то есть он обязательно должен иметь значение.

Возьмем ранее выделенные суперключи и найдем среди них candidate key. Первый пять суперключей не соответствуют первому условию, так как все их можно сократить до суперключа {Phone}:

  • {FirstName, LastName, Year, Phone}
  • {FirstName, Year, Phone}
  • {LastName, Year, Phone}
  • {FirstName, Phone}
  • {LastName, Phone}
  • {Year, Phone}

Суперключ {Phone} соответствует первому и второму условию, так как он имеет уникальное значение (в данном случае все пользователи могут иметь только уникальные телефонные номера). Но соответствует ли он третьему условию?
В целом нет, так как теоретически студент может и не иметь телефона. В этом случае атрибут Phone будет иметь значение NULL, то есть значение
будет отсутствовать.

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

И в таком случае суперключи таблицы не содержат потенциального ключа.

Первичный ключ

Первичный ключ (primary key) непосредственно применяется для идентификации строк в таблице. Он должен соответствовать следующим ограничениям:

  • Первичный ключ должен быть уникальным все время
  • Он должен постоянно присутствовать в таблице и иметь значение
  • Он не должен часто менять свое значение. В идеале он вообще не должен изменять значение.

Как правило, первичный ключ представляет один столбец таблицы, но также может быть составным и состоять из нескольких столбцов.

Если для таблицы можно выделить потенциальный ключ, то его можно использовать в качестве первичного ключа.

Если же потенциальные ключи отсутствуют, то для первичного ключа можно добавить к сущности специальный атрибут, который, как правило, называется, Id или
имеет форму Id (например, StudentId), либо может иметь другое название. И обычно данный атрибут принимает целочисленное значение, начиная с 1.

Если же у нас есть несколько потенциальных ключей, то те потенциальные ключи, которые не составляют первичный ключ, являются альтернативными ключами
(alternative key).

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

  • Name (имя пользователя)
  • Password (пароль)
  • Phone (телефонный номер)

НазадВперед

Реляционные отношения (связи) между таблицами базы данных

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

Существует три разновидности
связей между таблицами базы данных:

-«один-ко-многим»,

-«один-к-одному»,

-«многие-ко-многим».

Отношение «один-ко-многим»
имеет место, когда одной записи
родительской таблицы может
соответствовать несколько записей в
дочерней таблице.

Связь «один-ко-многим»
является самой распространенной для
реляционных баз данных.

В широко распространенной
нотации структуры баз данных IDEF1X
отношение «один-ко-многим» изображается путем
соединения таблиц линией, которая на
стороне дочерней таблицы оканчивается
кружком или иным символом. Поля, входящие в
первичный ключ для данной ТБД, всегда
расположены вверху и отчеркнуты от прочих
полей линией.

Отношение «один-к-одному»
имеет место, когда одной записи в
родительской таблице соответствует одна
запись в дочерней таблице.

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

Отношение «многие-ко-многим»
имеет место, когда:

а) записи в родительской таблице
может соответствовать больше одной записи
в дочерней таблице;

б) записи в дочерней таблице
может соответствовать больше одной записи
в родительской таблице.

Например, каждой студент
изучает несколько дисциплин. Каждая
дисциплина изучается несколькими
студентами.

Многие СУБД (в частности Access) не поддерживают связи «многие-ко-многим»
на уровне индексов и ссылочной целостности.
Считается, что всякую связь «многие-ко-многим»
можно заменить на одну или более связей «один-ко-многим».

Например,

Ссылка на основную публикацию