Ключи sql

пример

В качестве первого примера для иллюстрации внешних ключей предположим, что в базе данных учетных записей есть таблица со счетами-фактурами, и каждый счет-фактура связан с определенным поставщиком. Детали поставщика (например, имя и адрес) хранятся в отдельной таблице; каждому поставщику дается «номер поставщика» для его идентификации. Каждая запись счета-фактуры имеет атрибут, содержащий номер поставщика для этого счета-фактуры. Тогда «номер поставщика» является первичным ключом в таблице «Поставщик». Внешний ключ в таблице Invoices указывает на этот первичный ключ. Реляционная схема следующая. Первичные ключи выделены жирным шрифтом, а внешние ключи — курсивом.

  Supplier ( SupplierNumber, Name, Address, Type )
  Invoices ( InvoiceNumber, SupplierNumber, Text )

Соответствующий оператор языка определения данных выглядит следующим образом.

  CREATE TABLE Supplier (
     SupplierNumber  INTEGER NOT NULL,
     Name            VARCHAR(20) NOT NULL,
     Address         VARCHAR(50) NOT NULL,
     Type            VARCHAR(10),
     CONSTRAINT supplier_pk PRIMARY KEY(SupplierNumber),
     CONSTRAINT number_value CHECK (SupplierNumber > ) )

  CREATE TABLE Invoices (
     InvoiceNumber   INTEGER NOT NULL,
     SupplierNumber  INTEGER NOT NULL,
     Text            VARCHAR(4096),
     CONSTRAINT invoice_pk PRIMARY KEY(InvoiceNumber),
     CONSTRAINT inumber_value CHECK (InvoiceNumber > ),
     CONSTRAINT supplier_fk FOREIGN KEY(SupplierNumber)
        REFERENCES Supplier(SupplierNumber)
        ON UPDATE CASCADE ON DELETE RESTRICT )

Управление ключами SQL Server и базы данныхManaging SQL Server and Database Keys

Управление ключами шифрования заключается в создании новых ключей базы данных, создании резервной копии ключей сервера и базы данных и знании порядка восстановления, удаления и смены ключей.Managing encryption keys consists of creating new database keys, creating a backup of the server and database keys, and knowing when and how to restore, delete, or change the keys.

Чтобы управлять симметричными ключами, можно использовать средства, входящие в SQL ServerSQL Server , для выполнения следующих действий:To manage symmetric keys, you can use the tools included in SQL ServerSQL Server to do the following:

  • Резервное копирование копии ключа сервера и базы данных, чтобы использовать их при восстановлении установки сервера или в ходе запланированного переноса.Back up a copy of the server and database keys so that you can use them to recover a server installation, or as part of a planned migration.

  • Восстановление ранее сохраненного ключа в базе данных.Restore a previously saved key to a database. Это позволяет новому экземпляру сервера обращаться к существующим данным, которые первоначально шифровались не им.This enables a new server instance to access existing data that it did not originally encrypt.

  • Удаление зашифрованных данных из базы данных в маловероятной ситуации, когда не удается обратиться к зашифрованным данным.Delete the encrypted data in a database in the unlikely event that you can no longer access encrypted data.

  • Повторное создание ключей и повторное шифрование данных в маловероятной ситуации, когда ключ становится известен посторонним.Re-create keys and re-encrypt data in the unlikely event that the key is compromised. Для повышения безопасности следует периодически повторно создавать ключи (например, раз в несколько месяцев) для защиты сервера от атак с целью расшифровки ключа.As a security best practice, you should re-create the keys periodically (for example, every few months) to protect the server from attacks that try to decipher the keys.

  • Добавление или удаление экземпляра сервера из масштабного развертывания, когда несколько серверов используют одну базу данных и ключ, допускающий обратимое шифрование для этой базы данных.Add or remove a server instance from a server scale-out deployment where multiple servers share both a single database and the key that provides reversible encryption for that database.

Пример приведения таблицы ко второй нормальной форме

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

Таблица сотрудников в первой нормальной форме.

ФИО Должность Подразделение Описание подразделения
Иванов И.И. Программист Отдел разработки Разработка и сопровождение приложений и сайтов
Сергеев С.С. Бухгалтер Бухгалтерия Ведение бухгалтерского и налогового учета финансово-хозяйственной деятельности
John Smith Продавец Отдел реализации Организация сбыта продукции

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

Теперь мы можем начать процесс нормализации этой таблицы до второй нормальной формы.

Что для этого нам нужно сделать? Нам нужно внедрить первичный ключ.

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

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

Таким образом, чтобы привести эту таблицу ко второй нормальной форме, мы должны добавить в нее еще один атрибут, т.е. столбец с табельным номером.

Таблица сотрудников во второй нормальной форме с простым первичным ключом.

Табельный номер ФИО Должность Подразделение Описание подразделения
1 Иванов И.И. Программист Отдел разработки Разработка и сопровождение приложений и сайтов
2 Сергеев С.С. Бухгалтер Бухгалтерия Ведение бухгалтерского и налогового учета финансово-хозяйственной деятельности
3 John Smith Продавец Отдел реализации Организация сбыта продукции

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

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

Требования второй нормальной формы (2NF)

Чтобы база данных находилась во второй нормальной форме (2NF), необходимо чтобы ее таблицы удовлетворяли следующим требованиям:

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

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

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

Главное правило второй нормальной формы (2NF) звучит следующим образом

Ссылочная целостность

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

Как при этом не допустить появления \»болтающихся в воздухе\» строк дочерней таблицы? Для этого существуют правила ссылочной целостности ON UPDATE и ON DELETE, которые, по стандарту SQL 92, могут содержать следующие инструкции:

Более интересные моменты возникают, когда мы удаляем или изменяем строки родительской таблицы. Как при этом не допустить появления \»болтающихся в воздухе\» строк дочерней таблицы? Для этого существуют правила ссылочной целостности ON UPDATE и ON DELETE, которые, по стандарту SQL 92, могут содержать следующие инструкции:

  • CASCADE — обеспечивает автоматическое выполнение в дочерней таблице тех же изменений, которые были сделаны в родительском ключе. Если родительский ключ был изменен — ON UPDATE CASCADE обеспечит точно такие же изменения внешнего ключа в дочерней таблице. Если строка родительской таблицы была удалена, ON DELETE CASCADE обеспечит удаление всех соответствующих строк дочерней таблицы.
  • SET NULL — при удалении строки родительской таблицы ON DELETE SET NULL установит значение NULL во всех столбцах вторичного ключа в соответствующих строках дочерней таблицы. При изменении родительского ключа ON UPDATE SET NULL установит значение NULL в соответствующих столбцах соответствующих строк (о как:) дочерней таблицы.
  • SET DEFAULT — работает аналогично SET NULL, только записывает в соответствующие ячейки не NULL, а значения, установленные по умолчанию.
  • NO ACTION (установлено по умолчанию) — при изменении родительского ключа никаких действий с внешним ключом в дочерней таблице не производится. Но если изменение значений родительского ключа приводит к нарушению ссылочной целосности (т.е. к появлению «висящих в воздухе» строк дочерней таблицы), то СУБД не даст произвести такие изменения родительской таблицы.

Ну а сейчас — от общего к частному.

Простой и составной первичный ключ

Primary key может быть простым и составным. Если уникальность записи определяется значением только в одном поле, как описано выше, мы имеем дело с простым ключом. Составной ключ – это первичный ключ базы данных, состоящий из двух и более полей. Рассмотрим следующее отношение клиентов банка.

Ф. И. О. Дата рождения Серия паспорта Номер паспорта
Иванов П.А. 12.05.1996 75 0553009
Сергеев В.Т. 14.07.1958 71 4100654
Краснов Л.В. 22.01.2001 73 1265165

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

Типы связей и их реализация. Ссылочная целостность и ее обеспечение.

Более
правильным вариантом является вынесение
сведений об издателях в отдельную
таблицу «Издатели». При этом таблица
«Книги» будет содержать ссылки на
записи таблицы «Издатели».

Чтобы
сохранить синхронизацию, следует
обеспечить целостность данных между
таблицами «Книги» и «Издатели».
Связи с обеспечением целостности данных
позволяют следить за тем, чтобы данные
в одной таблице соответствовали данным
в другой. Например, каждая книга в таблице
«Книги» связана с определенным
издателем в таблице «Издатели».
Добавить в таблицу книгу для издателя,
отсутствующего в базе данных, невозможно.

Виды
связей между таблицами

Связь
осуществляется путем сопоставления
данных в ключевых столбцах; обычно это
столбцы, имеющие в обеих таблицах
одинаковые названия. В большинстве
случаев сопоставляются первичный ключ
одной таблицы, содержащий для каждой
из строк уникальный идентификатор, и
внешний ключ другой таблицы. Например,
с каждым из изданий, находящихся в
продаже, можно связать объемы его продаж
путем создания столбца «ИД_издания»
в таблице «Книги» (первичный ключ)
и столбца «ИД_издания» в таблице
«Продажи» (внешний ключ).

Существует
три вида связей между таблицами. Вид
создаваемой связи зависит от того, как
заданы связанные столбцы.

Связи
«один ко многим»

Связь
«один ко многим» — наиболее
распространенный вид связи. При такой
связи каждой строке таблицы А может
соответствовать множество строк таблицы
Б, однако каждой строке таблицы Б может
соответствовать только одна строка
таблицы А. Например, между таблицами
«Издатели» и «Книги» установлена
связь «один ко многим»: каждый из
издателей может опубликовать множество
книг, однако каждая книга публикуется
лишь одним издателем.

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

В
Microsoft Access сторона связи «один ко
многим», которой соответствует
первичный ключ, обозначается символом
ключа. Сторона связи, которой соответствует
внешний ключ, обозначается символом
бесконечности.

Связи
«многие ко многим«

При
установлении связи «многие ко многим»
каждой строке таблицы А может
соответствовать множество строк таблицы
Б и наоборот. Такая связь создается при
помощи третьей таблицы, называемой
соединительной, первичный ключ которой
состоит из внешних ключей, связанных с
таблицами А и Б. Например, между таблицами
«Авторы» и «Книги» установлена
связь вида «многие ко многим»,
задаваемая с помощью связей вида «один
ко многим» между каждой из этих таблиц
и таблицей «АвторыКниг». Первичный
ключ таблицы «АвторыКниг» — это
сочетание столбцов «ИД_автора»
(первичного ключа таблицы авторов) и
«ИД_книги» (первичного ключа таблицы
заголовков).

Связи
«один к одному»

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

Этот
вид связи используется редко, поскольку
в такой ситуации связываемые данные
обычно можно хранить в одной таблице.
Использовать связь вида «один к
одному» можно в указанных ниже случаях.

• Чтобы
разделить таблицу, содержащую слишком
много столбцов.

• Чтобы
изолировать часть таблицы по соображениям
безопасности.

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

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

В
Microsoft Access сторона связи «один к одному»,
которой соответствует первичный ключ,
обозначается символом ключа. Сторона
связи, которой соответствует внешний
ключ, также обозначается символом ключа.

Создание
связей между таблицами

При
установлении связи между таблицами
связанные поля не обязательно должны
иметь одинаковые названия. При этом у
них должен быть один и тот же тип данных,
если только поле, являющееся первичным
ключом, не относится к типу «Счетчик».
Поле типа «Счетчик» можно связать
с полем типа «Числовой» только в
том случае, если для свойства FieldSize
(размер поля) каждого из них задано одно
и то же значение. Например, можно связать
столбцы типов «Счетчик» и «Числовой»,
если для свойства FieldSize каждого из них
установлено значение «Длинное целое».
Даже если оба связываемых столбца
относятся к типу «Числовой», значение
свойства FieldSize для обоих полей должно
быть одинаковым.

При помощи Microsoft Equation 3.0

Стоит сразу сказать, что данный способ для вставки знака корня в документ отлично подходит как для соответствия всем нормам, так и для применения его во всех версиях программы. А пользоваться мы будем инструментом под названием Microsoft Equation 3.0.

Для начала необходимо открыть интерфейс самой утилиты, для этого:

  1. Перейдите во вкладку “Вставка”.
  2. В группе инструментов “Текст” нажмите по кнопке “Объекты”.
  3. В появившемся окне выберите “Microsoft Equation 3.0”, который находится в списке “Тип объекта”.
  4. Нажмите кнопку “ОК”.

После этого в месте где был установлен курсор, появится форма для заполнения

Обратите внимание также на то, что внешний вид “Ворда” довольно сильно поменяется

Для вставки знака корня вам необходимо в окне инструментов “Формула” нажать на кнопку “Шаблоны дробей и радикалов”. Ее расположение вы можете наблюдать на изображении ниже.

Теперь в выпадающем списке нужно выбрать соответствующий шаблон. После этого в поле для набора формул появится знак корня, а рядом с ним пустая ячейка, в которую можно вводить число. После того как число было введено, переключится на стандартный интерфейс программы можно, нажав левую кнопку мыши (ЛКМ) за пределами формы для ввода формул.

Какие типы СУБД в соответствии с моделями данных вы знаете?

Этот вопрос по SQL предполагает не просто назвать, но и дать краткое описание каждому типу.

Существует несколько типов СУБД:

  1. Реляционные, которые поддерживают установку связей между таблицами с помощью первичных и внешних ключей. Пример — MySQL.
  2. Flat File — базы данных с двумерными файлами, в которых содержатся записи одного типа и отсутствует связь с другими файлами, как в реляционных. Пример — Excel.
  3. Иерархические подразумевают наличие записей, связанных друг с другом по принципу отношений один-к-одному или один-ко-многим. А вот для отношений многие-ко-многим следует использовать реляционную модель. Пример — Adabas.
  4. Сетевые похожи на иерархические, но в этом случае «ребёнок» может иметь несколько «родителей» и наоборот. Примеры — IDS и IDMS.
  5. Объектно-ориентированные СУБД работают с базами данных, которые состоят из объектов, используемых в ООП. Объекты группируются в классы и называются экземплярами, а классы в свою очередь взаимодействуют через методы. Пример — Versant.
  6. Объектно-реляционные обладают преимуществами реляционной и объектно-ориентированной моделей. Пример — IBM Db2.
  7. Многомерная модель является разновидностью реляционной и использует многомерные структуры. Часто представляется в виде кубов данных. Пример — Oracle Essbase.
  8. Гибридные состоят из двух и более типов баз данных. Используются в том случае, если одного типа недостаточно для обработки всех запросов. Пример — Altibase HDВ.

3

Руководство по проектированию реляционных баз данных (10-13 часть из 15) [перевод]

Перевод

Продолжение.
Предыдущие части: 1-3, 4-6, 7-9

10. Нормализация баз данных

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

6.2. Первичные ключи и индексирование

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

таблицы. Если для таблицы определен
первичный ключ, то Microsoft Access предотвращает
дублирование ключа или ввод нулевых
значений в эти поля.

В
Access допускается определение первичных
ключей трех типов:

Ключевые
поля счетчика
.
Поле счетчика можно задать таким образом,
чтобы при добавлении каждой новой записи
в таблицу в это поле автоматически
вносился порядковый номер. Указание
такого поля в качестве ключевого является
наиболее простым способом создания
первичного ключа. Если до сохранения
созданной таблицы ключевые поля не были
определены, Access предлагает создать
ключевое поле автоматически. При нажатии
кнопки «Да» будет создано ключевое
поле счетчика.

Простой
ключ.

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

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

Рис.
6.2. Пример таблицы, требующей создания
составного ключа

Для
создания составного ключа следует в
режиме конструктора выделить нужные
поля, удерживая клавишу CTRL,
а затем выполнить команду ПРАВКА/КЛЮЧЕВОЕ
ПОЛЕ (кнопка
).

Если
порядок полей в составном первичном
ключе должен отличаться от порядка
полей в таблице, следует выполнить
команду ВИД/ИНДЕКСЫ (кнопка
на панели инструментов), чтобы открытьокно
«Индексы». В этом окне и следует
указать другой порядок полей дляиндексас именем «PrimaryKey» (см. рис.6.3).

Рис.
6.3. Окно для изменения порядка полей в
составном ключе

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

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

позволяет поддерживать записи
упорядоченными по выбранному полю.
Индекс можно создать по одному
(простой индекс)

или нескольким полям (составной
индекс
).
Для создания простого индекса
используется свойство поля
“Индексированное поле”, оно может
содержать и не уникальные значения,
например, повторяющиеся фамилии.
Возможны три типа индексации: Нет, Да
(Допускаются совпадения), Да (Совпадения
не допускаются). При индексировании
по умолчанию задаётся порядок
сортировки

по возрастанию.

Пример
окна для создания индексированного
поля типа «Да (Совпадения не допускаются)»
приведён на рис. 6.4 – это поле «КОД
ТОВАРА» таблицы «ТОВАРЫ».

Рис.
6.4. Вид таблицы «ТОВАРЫ» в режиме
конструктора

Такой
тип индексации описывает уникальное
поле, т.е. товары могут иметь повторяющиеся
значения в полях «КАТЕГОРИЯ»,
«НАИМЕНОВАНИЕ» и даже «ЦЕНА»,
но поле «КОД ТОВАРА» однозначно
идентифицирует этот товар.

Модель данных “ключ-значение” и документная модель

Ранее мы говорили о том, что базы данных типа “ключ—значение” и документные базы данных являются сильно агрегатно-ориентированными. Мы имели в виду, что эти базы данных в основном были сконструированы из агрегатов. Базы данных обоих типов состоят из множества агрегатов, каждый из которых имеет ключ или идентифи­катор, который используется для доступа к данным.

Эти две модели отличаются друг от друга тем, что в базе данных “ключ- значение” агрегат является непроницаемым для базы данных — просто большой черный ящик, состоящий из преимущественно бессмысленных битов. В противопо­ложность этому документная база может видеть структуру агрегата. Преимущество непрозрачности заключается в том, что в агрегате можно хранить все что угодно. База данных может ограничивать общий размер агрегата, но в остальном мы име­ем полную свободу. Документная база данных накладывает ограничения на то, что можно хранить в агрегате, определяя допустимые структуры и типы. Однако за это мы получаем большую гибкость доступа. В хранилище типа “ключ-значение” мы можем просматривать агрегат только с помощью его ключа. В документной базе данных мы можем посылать базе данных запросы, касающиеся полей в агрегате, извлекать части агрегата, а не весь агрегат целиком, причем база данных может соз­давать индексы с учетом содержимого агрегата. На практике разделительная линия между базами данных типа “ключ-значение” и документными базами данных до­вольна расплывчата. Люди часто записывают идентификаторы в документные базы данных, чтобы выполнять поиск в стиле “ключ-значение”. Базы данных, класси­фицированные как базы типа “ключ-значение”, могут предлагать новые структуры для данных, помимо непрозрачных агрегатов. Например, база данных Riak позво­ляет добавлять метаданные к агрегатам для индексирования и установления связей между агрегатами, a Redis позволяет разбивать агрегаты на списки или множества. Кроме того, можно обеспечить механизм запросов с помощью интегрированных средств поиска, как в базе данных Solr. Например, поисковый механизм базы данных Riak, аналогичный поисковому механизму базы Solr, выполняет поиск агрегатов, хранящихся в виде структур JSON или XML.

Несмотря на такое нечеткое разделение, эти две категории в целом отличаются друг от друга. Базы данных типа “ключ—значение”, как правило, выполняют поиск агрегатов по ключу. В документных базах данных пользователь должен подать запрос, основан­ный на внутренней структуре документа; это может быть ключ, но, скорее всего, это будет нечто другое.

6.1.Понятие реляционной базы данных

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

Таблица
2

№№

ИМЯ
ПОЛЯ

ТИП
ПОЛЯ

1

Фамилия

Текстовый

2

Имя

Текстовый

3

Отчество

Текстовый

4

Почтовый
индекс

Текстовый

5

Страна

Текстовый

6

Город

Текстовый

7

Адрес

Текстовый

8

Кредит

Денежный

9

Примечание

МЕМО
или OLE

10

Категория
товара

Текстовый

11

Наименование
товара

Текстовый

12

Фирма-производитель

Текстовый

13

Цена

Денежный

14

Дата
заказа

Дата/Время

15

Заказано

Числовой

16

Дата
продажи

Дата/Время

17

Продано

Числовой

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

Поэтому
целесообразно разбить эту таблицу
на четыре таблицы “КЛИЕНТЫ”, “ЗАКАЗЫ
И ПРОДАЖИ”, “ТОВАРЫ” и «ПОСТАВЩИКИ»,
установив связи между ними, например,
так, как показано на рис. 6.1.

Рис.
6.1. Схема данных в реляционной БД

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

– совокупность некоторых таблиц с
данными, взаимосвязанных между собой
определёнными логическими соотношениями
(relation).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector