Страницы: 1
RSS
О базах данных просто, и хранилищах данных
 
Добрый день. Тема про базы данных простыми словами

Когда работал формулами или в PQ, то часто суть работы сводилось к сборке с нескольких таблиц, источников в одну таблицу. Когда коснулась тема базы данных, то вижу обратную картину: таблицу, в которой все собрано, разбивают на несколько таблиц и тем самым уменьшают количество повторений информации. Связь между таблицами держат отношениями(связями). Причем, глядя как связывают таблицы в PP и PB, мне была понятен принцип связывания: как в PQ Join - одно поле к другому. Только в PP связь по одному полю. Кстати, возможно ли связывать в базах данных по двум полям таблиц? В базах данных же, после разбивки на несколько таблиц, связывают по ключу (поле типа индекса) и полю значений и это работает. Но мне не понятно почему?
Например, в этой теме Андрей VG предложил базу данных. Таблица Типы категорий связана с таблицей Врачи одноименными полями Код_категории. Но в одной таблице это поле индекса, а в другой это поле с текстовыми значениями. Почему это работает?

Сразу еще вопрос по той же базе. Таблицы Заказы и Детали_заказов связаны. В таблице Детали_заказов значения поля Код_заказа не уникальны. Правильно ли я понимаю что значения этого поля не формируются автоматом? Эти значения надо подготавливать отдельно до загрузки, например, в PQ(группировкой и индексом)?
Загрузку собираюсь заносить не по одной строке, а сразу несколько или добавлять или переписывать

Кстати, возможно ли связывать в базах данных по двум полям таблиц? Отвечу сам. Можно сделать в нужных таблицах составной ключ. Правда, советуют не увлекаться.
Изменено: Михаил Л - 20.08.2020 12:45:00
 
Михаил Л,
1. в базах ключ как правило уникален в справочнике и однозначно определяет элемент, что не только сокращает объем данных, но исключает появление "однофамильцев" которые друг на друга завязаны..
2. Как правило ключ индексируется, что в последствии ускоряет работу и облегчает жизнь серверу
3. Связь по нескольким полям - а почему нет? Если это разные сущности, например нужно кроме ограниченного списка объектов выбрать те, которые соответствуют определенным датам из списка и даты уникальны для каждого объекта . Объект нужно связывать по ключу. а даты дополнительно. ( ну это я фантазирую для примера)
По вопросам из тем форума, личку не читаю.
 
БМВ, спасибо за ответ
Цитата
БМВ написал:
1. в базах ключ как правило уникален в справочнике и однозначно определяет элемент, что не только сокращает объем данных, но исключает появление "однофамильцев" которые друг на друга завязаны..
2. Как правило ключ индексируется, что в последствии ускоряет работу и облегчает жизнь серверу
Значит, даже если уверен что значения поля для ключа будут уникальны, для пользы дела лучше добавить счетчик индекса. Потом спасибо скажут)
Цитата
БМВ написал:
Объект нужно связывать по ключу. а даты дополнительно
А как это? Два раза связать? Составной ключ из текста и даты, я так понимаю, не сделать.
 
Добрый день, Михаилы!
Очень упрощенно. SQL-базы теоретически могут работать вообще без индексов (ключей). Связь между таблицами задается в предикатах SQL-запросов. Если к таблице, участвующей в запросе, добавляется индекс (или удаляется индекс), то результат SQL запроса не должен измениться (при условии, конечно, что добавление уникального индекса не вызвало исключительную ситуацию).
Другое дело, что без индексов многие SQL-запросы будут иметь неэффективный план выполнения. Кроме того, наличие уникальных индексов естественным образом ограничивает ввод данных в эту таблицу. Иногда еще (далеко не всегда) используют внешниеключи опять же для ограничения корректировки данных и "подсказок" компилятору SQL-запросов.

Индекс в "развитых" SQL-базах может состоять из нескольких полей, использовать функции и прочие извращения; может быть уникальным или не уникальным. Одна таблица может иметь несколько индексов (а может и не иметь). Иногда, один из уникальных индексов объявляется первичным (Primary Key).
Изменено: sokol92 - 20.08.2020 15:15:36
Владимир
 
sokol92, здравствуйте!
Цитата
sokol92 написал:
используют  внешние  ключи  опять же для ограничения корректировки данных и "подсказок" компилятору SQL-запросов
Внешний ключ, я так понял, все таки надо подготавливать перед загрузкой для каждой строки соответствующий. Я то думал может можно в базе данных как то группировать и назначать этот внешний ключ. Вообщем, проясняется)
И  это
Цитата
Михаил Л написал:
в одной таблице это поле индекса, а в другой это поле с текстовыми значениями
Можно объяснить так: если в таблице только два поля - Ключевое поле и поле с уникальными значениями, то нет разницы какое поле использовать для связи.
Или так неверно считать? Если для связи вместо поля Код_категории назначу поле Наименование категории, изменится ли отношение этих таблиц? Результат джойна будет тот же?
 
Внешние ключи - это специальный механизм, применяемый при описании таблиц - почитайте.

Связь между таблицами задается в SQL запросе - и это может быть не только равенство полей (одного или нескольких). Например, у Вас есть таблица сотрудников с  полями: табельный номер, ФИО, СНИЛС, дата рождения. Вы можете эту таблицу в запросе связать с другой таблицей по табельному номеру (он, как правило, уникален), можете по СНИЛС (если он есть во второй таблице), можете по дате рождения и по совпадению ФИО в верхнем (или нижнем) регистре (используя функцию SQL UPPER). Разные запросы могут использовать разные методы соединения таблиц. Можно сохранить "полезный" запрос в базе данных - хранимое представление (VIEW).
Изменено: sokol92 - 21.08.2020 10:17:51
Владимир
Страницы: 1
Наверх