Какие данные могут быть ключом бд номер паспорта номер дома
Обновлено: 28.06.2024
В данной теме, на примере двух таблиц, определяются основные понятия реляционных баз данных, а именно:
- первичный ключ;
- внешний ключ;
- простой и составной ключ;
- отношение, типы отношений;
- искусственный и естественный ключи;
- главная (master) и подчиненная (detail) таблицы.
Содержание
Поиск на других ресурсах:
Пусть задана база данных работников предприятия, которая состоит из двух таблиц. Первая таблица содержит данные о работнике. Вторая таблица содержит сведения о заработной плате работника.
Таблицы имеют следующую структуру.
Вопрос/ответ
1. Что такое первичный ключ в таблице базы данных? Для чего используются первичные ключи?
При работе с таблицами в реляционных базах данных, желательно (необходимо), чтобы каждая таблица имела так называемый первичный ключ.
Первичный ключ – это поле, которое используется для обеспечения уникальности данных в таблице. Это означает, что значение (информация) в поле первичного ключа в каждой строке (записи) таблицы может быть уникальным.
Уникальность необходима во избежание неоднозначности, когда неизвестно к какой записи таблицы можно обратиться, если в таблице есть повторяющиеся записи (две записи имеют одинаковые значения во всех полях таблицы).
2. Что такое отношение (связь) между таблицами (relationship)? Пример
Рис. 2. Связь (отношение) между полями таблиц
3. Что такое внешний ключ (foreign key)? Пример
Внешний ключ – это одно или несколько полей (атрибутов), которые являются первичными в другой таблице и значение которых заменяется значениями первичного ключа другой таблицы.
4. Что такое рекурсивный внешний ключ?
Рекурсивный внешний ключ – это внешний ключ, который ссылается на одну и ту же таблицу, к которой он принадлежит. В этом случае поле (атрибут), которое соответствует внешнему ключу, есть ключом одного и того же отношения (связи).
5. Могут ли первичный и внешний ключи быть простыми или составными (сложными)?
Первичный, вторичный и внешний ключи могут быть как простыми так и составными (сложными). Простые ключи – это ключи, которые содержат только одно поле (один атрибут). Составные (сложные) ключи – это ключи, которые содержат несколько полей (атрибутов).
6. Какое отличие между искусственным и естественным ключом? Пример
Естественной ключ обеспечивает уникальность из самой сущности предметной области. Бывают случаи, когда значения записей некоторого поля (полей) таблицы есть уникальными. Это поле может быть естественным ключом.
Искусственный ключ вводится дополнительно для обеспечения уникальных значений. Чаще всего искусственный ключ есть полем типа счетчик (counter). В таком поле, при добавлении новой записи (строки) в таблицу, значение счетчика увеличивается на 1 (или другую величину). Если запись удалить из таблицы, то максимальное значение счетчика строк уже не уменьшается, а остается как есть. Как правило, за этим все следит система управления базами данных.
7. Какие существуют способы выбора первичного ключа?
Существует 3 способа выбора первичного ключа:
- использовать поле-инкремент (поле-счетчик) как искусственный ключ;
- выбрать из данных одно поле, которое может обеспечить уникальность;
- выбрать из данных несколько полей, которые могут обеспечить уникальность. В этом случае ключ еще будет называться сложным (составным).
Если между таблицами есть связь, то одна из них может быть главной (master), а другая подчиненной (detail). Главная таблица отображает все записи, которые помещаются в ней. Подчиненная таблица отображает только те записи, которые соответствуют значению ключа главной таблицы, который на данный момент есть активным (текущим). Если изменяется текущая запись главной таблицы, то изменяется множество доступных записей подчиненной таблицы.
9. Какие существуют типы отношений (связей) между таблицами?
Существует 4 основных типа отношений между таблицами:
Открываем Access, создаем новую пустую базу данных.
После этого выбираем команду "Создать таблицу"
Начинаем с таблицы "Физические лица" .
Наименование данных | Тип данных | Примечание | Тип данных Access |
Серия паспорта | Строка | Серия паспорта состоит из двух букв | Текстовый, Длина поля - 2, Обязательное - Да Пустые строки - Нет Индексированное - Да, допускаются совпадения |
Номер паспорта | Число | Номер паспорта - целое число | Числовой, Длинное целое, Число десятичных знаков - 0, Маска ввода - 000000, Обязательное - Да, Индексированное - Да, допускаются совпадения |
ИНН | Число | Обязательно для идентификации, число. Внимание! Для реальной базы данных так делать нельзя, потому что человек может отказаться от получения ИНН по религиозным соображениям и ИНН у него может отсутствовать. Мы же для простоты считаем, что у каждого человека есть свой уникальный ИНН | Числовой, Длинное целое, Число десятичных знаков - 0, Маска ввода - 0000000000 Обязательное - Да, Индексированное - Да, совпадения не допускаются, Ключевое |
Адрес прописки | Строка | Адрес прописки будет нужен для оформления юридических действий | Текстовое, Размер поля - 255 |
Адрес проживания | Строка | Этот адрес будет нужен для связи с клиентом, направления ему писем | Текстовое, Размер поля - 255 |
Контактный телефон | Строка | Потребуется для быстрой связи с клиентом. Тип данных - могло быть и число, но для простоты учебного примера - пусть будет строка | Текстовое, Размер поля - 16 |
Перед созданием таблицы "Юридические лица" необходимо создать служебную таблицу "Формы собственности"
Наименование | Тип данных | Комментарий | Тип данных Access |
ID | Этот идентификатор необходим для дальнейшего создания связи с таблицей "Юридические лица" | Тип данных - Счетчик, Длинное целое, Последовательный, Индексированное - Да, совпадения не допускаются | |
Форма собственности | Это - текстовое название формы собственности | Текстовое, Размер поля - 255 |
Создаем таблицу "Юридические лица"
Создаем таблицу "Условия депозитов"
Наименование данных | Тип данных | Комментарий | Тип данных Access |
Код | По данному полю мы будем идентифицировать тип депозита | Счетчик, Длинное целое, Новые значения - последовательные, Индексируемое - Да, совпадения не допускаются | |
Срок начала действия условий депозита | Дата | Дата начала срока действия условий нужна для того, чтобы не иметь возможности открыть депозит раньше времени | Дата/Время Обязательное - Да |
Срок окончания действия условий депозита | Дата | Возможна ситуация, когда депозиты по старым условиям еще лежат в банке, но новые вклады на данных условиях уже не принимаются. Значение окончания действия также может отсутствовать, если предложение действует в данный момент | Дата/Время Обязательное - Нет |
Условия действительны для физических лиц | Логический | Предполагается информация да/нет | Логический Формат поля - Да/Нет |
Условия действительны для юридических лиц | Логический | Предполагается информация да/нет | Логический Формат поля - Да/Нет |
Минимальная сумма депозита | Число | Денежный | |
Минимальный срок размещения (дней) | Число | Без указания срока размещения договор депозита смысла не имеет | Целое, Значение по умолчанию - 30, Обязательное - Да |
Процентная ставка | Число | Одинарное с плавающей точкой | |
Условия выплаты процентов | Перечисление | Можно было бы создать отдельный справочник с условиями видов начисления процентов, но для простоты примера мы принимаем следующее: 0 - ежемесячное начисление по концу месяца на отдельный счет 1 - начисление по концу месяца на тот же самый счет 2 - начисление процентов в конце срока на тот же самый счет | Целое, Значение по умолчанию - 0, Обязательное - Да |
Возможно ли пополнение депозита | Логический | Логический Формат поля - Да/Нет | |
Допускается ли досрочное снятие | Логический | Досрочное снятие - это, фактически, разрыв условий договора, поэтому, как правило, при выплате процентов на вклад начисляются проценты по ставке, иной, чем изначально оговоренная | Логический Формат поля - Да/Нет |
Процентная ставка при досрочном снятии | Число | Одинарное с плавающей точкой |
Создаем таблицу "Договоры"
Наименование | Тип данных | Примечание | Тип данных Access |
Код | Для идентификации можно, конечно, использовать и номер договора. Но, поскольку, строка не удобна для создания связей между таблицами и, потенциально, будет замедлять быстродействие, создание дополнительного поля оправдано | Счетчик, Длинное целое, Новые значения - последовательные, Индексированное - Да, совпадения не допускаются | |
Дата заключения | Дата | Дата/Время, Значение по умолчанию =Date(), Обязательное - Да | |
Номер | Строка | Договор может быть пронумерован, например, как 1/3-55, поэтому тип данных - строка | Текстовый, Размер поля - 32 |
Дата окончания | Дата | Считаем, что все договоры имеют дату окончания и не пролонгируются | Дата/Время |
Договор с юр или физ лицом? | Логический | Далее у нас две ссылки, и лишь одна из них будет задействована. Поэтому данное поле, фактически, является переключателем, с кем у нас заключен договор и на какую таблицу искать ссылку (физ или юр) | |
Договор с юр лицом | | Ссылка на юридическое лицо | Числовой, Длинное целое, Индексированное - Да, допускаются совпадения |
Договор с физ лицом | Ссылка на физическое лицо | Числовой, Длинное целое, Индексированное - Да, допускаются совпадения |
Создаем таблицу "Счета"
Наименование | Тип данных | Примечание | Тип данных Access |
Группа счета | Число | Согласно утвержденному плану счетов банков в Украине это должна быть цифра "26" всегда. Поэтому редактирование поля мы не предумотрим | Тип данных - Целое, Значение по умолчанию - 26 |
Подгруппа счета | Число | "10", если это - краткосрочный депозит юр. лица "15", если это - долгосрочный депозит юр. лица "30", если это - краткосрочный депозит физ. лица "35", если это - долгосрочный депозит физ. лица | Тип данных - Целое |
Подномер счета | Число | Остальные 10 цифр, которые формируют номер счета Счетчик определит нам сквозную нумерацию, которая не зависит от группы и подгруппы счета. Это не совсем правильно. Мы должны нумеровать счета независимо. Но, поскольку пример учебный - мы сделали так для простоты. | Счетчик, Новые значения - Последовательные, Ключевое |
Номер счета | В номере счета 14 цифр, поэтому, чтобы получить счет вида 2615. нам необходимо обеспечить сдвиг по регистрам на соответствующее число разрядов | Вычисляемое, Формула: [Группа счета]*1000000000000 + [Подгруппа счета]*10000000000 + [Подномер счета] | |
Дата открытия | Дата | Счет должен обязательно иметь дату открытия | Дата/Время, Значение по умолчанию =Date(), Обязательное - Да |
Дата закрытия | Дата | Дата/Время | |
Договор | Ссылка на договор | Числовой, Длинное целое, Индексированное - Да, допускаются совпадения | |
Сумма | Сумма, которая храниться на счете в данный момент | Денежный, Формат поля - Денежный |
Теперь заходим в схему данных и устанавливаем связи между:
"Юридические лица.Форма собственности" и "Формы собственности.ID"
"Юридические лица.Директор" и "Физические лица.ИНН"
"Юридические лица.Главный бухгалтер" и "Физические лица.ИНН"
"Договоры.Договор с юр лицом" и "Юридические лица.Код ОКПО"
"Договоры.Договор с физ лицом" и "Физические лица.ИНН"
Читайте также: