Какие изменения можно внести в существующую схему данных как это сделать

Добавил пользователь Владимир З.
Обновлено: 16.09.2024

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

1.1. Для кого эта статья?

Эта статья будет полезна тем, кто хочет разобраться со связями между таблицами базы данных. В ней я постарался рассказать на понятном языке, что это такое. Для лучшего понимания темы, я чередую теоретический материал с практическими примерами, представленными в виде диаграммы и запроса, создающего нужные нам таблицы. Я использую СУБД Microsoft SQL Server и запросы пишу на T-SQL. Написанный мною код должен работать и на других СУБД, поскольку запросы являются универсальными и не используют специфических конструкций языка T-SQL.

1.2. Как вы можете применить эти знания?

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

2. Благодарности

Учтены были советы и критика авторов jobgemws, unfilled, firnind, Hamaruba.
Спасибо!

3.1. Как организовываются связи?

Связи создаются с помощью внешних ключей (foreign key).
Внешний ключ — это атрибут или набор атрибутов, которые ссылаются на primary key или unique другой таблицы. Другими словами, это что-то вроде указателя на строку другой таблицы.

3.2. Виды связей

Связи делятся на:

  1. Многие ко многим.
  2. Один ко многим.
    • с обязательной связью;
    • с необязательной связью;
  3. Один к одному.
    • с обязательной связью;
    • с необязательной связью;

4. Многие ко многим

Представим, что нам нужно написать БД, которая будет хранить работником IT-компании. При этом существует некий стандартный набор должностей. При этом:

4.1. Как построить такие таблицы?

Слева указаны работники (их id), справа — должности (их id). Работники и должности на этой таблице указываются с помощью id’шников.

На эту таблицу можно посмотреть с двух сторон:

  1. Таким образом, мы говорим, что работник с id 1 находится на должность с id 1. При этом обратите внимание на то, что в этой таблице работник с id 1 имеет две должности: 1 и 2. Т.е., каждому работнику слева соответствует некая должность справа.
  2. Мы также можем сказать, что должности с id 3 принадлежат пользователи с id 2 и 3. Т.е., каждой роли справа принадлежит некий работник слева.

4.2. Реализация



С помощью ограничения foreign key мы можем ссылаться на primary key или unique другой таблицы. В этом примере мы

  • ссылаемся атрибутом PositionId таблицы EmployeesPositions на атрибут PositionId таблицы Position;
  • атрибутом EmployeeId таблицы EmployeesPositions — на атрибут EmployeeId таблицы Employee;

4.3. Вывод

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

5. Один ко многим

Эта самая распространенная связь между базами данных. Мы рассматриваем ее после связи многие ко многим для сравнения.

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

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

Другими словами, телефон принадлежит только одному пользователю. А пользователю могут принадлежать 1 и более телефонов (многие).

Как мы видим, это отношение один ко многим.

5.1. Как построить такие таблицы?

PhoneId PersonId PhoneNumber
1 5 11 091-10
2 5 19 124-66
3 17 21 972-02

5.2. Почему мы не делаем тут таблицу-посредника?

Таблица-посредник нужна только в том случае, если мы имеем связь многие-ко-многим. По той простой причине, что мы можем рассматривать ее с двух сторон. Как, например, таблицу EmployeesPositions ранее:

  1. Каждому работнику принадлежат несколько должностей (многие).
  2. Каждой должности принадлежит несколько работников (многие).

5.3. Реализация



6. Один к одному

Представим, что на работе вам дали задание написать БД для учета всех работников для HR. Начальник уверял, что компании нужно знать только об имени, возрасте и телефоне работника. Вы разработали такую БД и поместили в нее всю 1000 работников компании. И тут начальник говорит, что им зачем-то нужно знать о том, является ли работник инвалидом или нет. Наиболее простое, что приходит в голову — это добавить новый столбец типа bool в вашу таблицу. Но это слишком долго вписывать 1000 значений и ведь true вы будете вписывать намного реже, чем false (2% будут true, например).

Но это еще не связь один к одному. Дело в том, что в такую таблицу работник может быть вписан более одного раза, соответственно, мы получили отношение один ко многим: работник может быть несколько раз инвалидом. Нужно сделать так, чтобы работник мог быть вписан в таблицу только один раз, соответственно, мог быть инвалидом только один раз. Для этого нам нужно указать, что столбец EmployeeId может хранить только уникальные значения. Нам нужно просто наложить на столбец EmloyeeId ограничение unique. Это ограничение сообщает, что атрибут может принимать только уникальные значения.

Выполнив это мы получили связь один к одному.

Заметка. Обратите внимание на то, что мы могли также наложить на атрибут EmloyeeId ограничение primary key. Оно отличается от ограничения unique лишь тем, что не может принимать значения null.

6.1. Вывод

Можно сказать, что отношение один к одному — это разделение одной и той же таблицы на две.

6.2. Реализация



Таблица DisabledEmployee имеет атрибут EmployeeId, что является внешним ключом. Он ссылается на атрибут EmployeeId таблицы Employee. Кроме того, этот атрибут имеет ограничение unique, что говорит о том, что в него могут быть записаны только уникальные значения. Соответственно, работник может быть записан в эту таблицу не более одного раза.

7. Обязательные и необязательные связи

Связи можно поделить на обязательные и необязательные.

7.1. Один ко многим

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

А) У женщины необязательно есть свои дети. Соответственно, связь необязательна.
Б) У ребенка обязательно есть только одна биологическая мать – в таком случае, связь обязательна.

7.2. Один к одному

  1. Один к одному с обязательной связью:
    У одного гражданина определенной страны обязательно есть только один паспорт этой страны. У одного паспорта есть только один владелец.
  2. Один к одному с необязательной связью:
    У одной страны может быть только одна конституция. Одна конституция принадлежит только одной стране. Но конституция не является обязательной. У страны она может быть, а может и не быть, как, например, у Израиля и Великобритании.

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

А) Наличие загранпаспорта необязательно – его может и не быть у гражданина. Это необязательная связь.
Б) У загранпаспорта обязательно есть только один владелец. В этом случае, это уже обязательная связь.

7.3. Многие ко многим

Человек может инвестировать в акции разных компаний (многих). Инвесторами какой-то компании являются определенные люди (многие).

А) Человек может вообще не инвестировать свои деньги в акции.
Б) Акции компании мог никто не купить.

8. Как читать диаграммы?


Мы видим отношение один ко многим. Одной персоне принадлежит много телефонов.

Как сделать схему в Ворде

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

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

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

Создание блок-схемы

1. Перейдите во вкладку “Вставка” и в группе “Иллюстрации” нажмите кнопку “SmartArt”.

SmartArt в Word

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

SmartArt выбор блок-схемы в Word

Примечание: Обратите внимание на то, что при нажатие левой кнопкой мышки на любую группу, в окне, в котором отображаются входящие в нее элементы, появляется также и их описание. Это особенно удобно в случае, когда вы не знаете, какие объекты вам нужны для создания той или иной блок-схемы или, наоборот, для чего конкретные объекты предназначены.

3. Выберите тип схемы, которую хотите создать, а затем выберет элементы, которые для этого будете использовать, и нажмите “ОК”.

Блок-схема в Word

4. Блок-схема появится в рабочей области документа.

Вместе с добавившимися блоками схемы, на листе Ворд появится и окно для введения данных непосредственно в блок-схему, это также может быть заранее скопированный текст. Из этого же окна вы можете увеличить количество выбранных блоков, просто нажимая “Enter” после заполнения последнего.

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

На панели управления в разделе “Работа с рисунками SmartArt”, во вкладке “Конструктор” вы всегда можете изменить внешний вид созданной вами блок-схемы, например, ее цвет. Более подробно обо всем этом мы расскажем ниже.

Работа с рисунками SmartArt в Word

Совет 1: Если вы хотите добавить в документ MS Word блок-схему с рисунками, в диалоговом окне объектов SmartArt выберите “Рисунок” (“Процесс со смещенными рисунками” в более старых версиях программы).

Совет 2: При выборе составляющих объектов схемы и их добавление стрелки между блоками появляются автоматически (их вид зависит от типа блок-схемы). Однако, благодаря разделам того же диалогового окна “Выбор рисунков SmartArt” и представленным в них элементах, можно сделать схему со стрелками нестандартного вида в Ворде.

Добавление и удаление фигур схемы

Добавляем поле

1. Кликните по графическому элементу SmartArt (любой блок схемы), чтобы активировать раздел работы с рисунками.

Добавление поля в блок-схему

2. В появившейся вкладке “Конструктор” в группе “Создание рисунка” нажмите на треугольник, расположенный возле пункта “Добавить фигуру”.

Добавить фигуру в блок-схему в Word

3. Выберите один из предложенных вариантов:

  • “Добавить фигуру после” — поле будет добавлено на том же уровне, что и текущее, но после него.
  • “Добавить фигуру перед” — поле будет добавлено на том же уровне, что и уже существующее, но перед ним.

Добавленная фигура в блок-схеме в Word

Удаляем поле

Для удаления поля, как и для удаления большинства символов и элементов в MS Word, выделите необходимый объект, кликнув по нему левой кнопкой мышки, и нажмите клавишу “Delete”.

Удаленное поле в Word

Перемещаем фигуры блок-схемы

1. Кликните левой кнопкой мышки по фигуре, которую хотите переместить.

2. Используйте для перемещения выделенного объекта стрелки на клавиатуре.

перемещение элементов блок-схемы в Word

Совет: Чтобы перемещать фигуру малыми шагами, держите зажатой клавишу “Ctrl”.

Изменяем цвет блок-схемы

Отнюдь не обязательно, чтобы элементы созданной вами схемы выглядели шаблонно. Вы можете изменить не только их цвет, но и стиль SmartArt (представлены в одноименной группе на панели управления во вкладке “Конструктор”).

1. Кликните по элементу схемы, цвет которого вы хотите изменить.

2. На панели управления во вкладке “Конструктор” нажмите кнопку “Изменить цвета”.

Изменение цвета блок-схемы в Word

3. Выберите понравившийся цвет и нажмите на него.

4. Цвет блок-схемы сразу же изменится.

Измененный цвет блок-схемы в Word

Совет: По наведению курсора мышки на цвета в окне их выбора, вы можете сразу увидеть, как будет выглядеть ваша блок-схема.

Изменяем цвет линий или тип границы фигуры

1. Кликните правой кнопкой мышки на границе элемента SmartArt , цвет которого вы хотите изменить.

Изменение цвета линии в Word

2. В появившемся контекстном меню выберите пункт “Формат фигуры”.

Изменение цвета линии Формат фигуры в word

3. В окне, которое появится справа, выберите пункт “Линия”, выполните необходимые настройки в развернувшемся окне. Здесь вы можете изменить:

параметры изменения цаета линии в Word

4. Выбрав желаемый цвет и/или тип линии, закройте окно “Формат фигуры”.

5. Внешний вид линии блок-схемы изменится.

Измененный цвет линии в Word

Изменяем цвет фона элементов блок-схемы

1. Кликнув правой кнопкой мышки по элементу схемы, выберите в контекстном меню пункт “Формат фигуры”.

Изменение цвета фона в Word

2. В открывшемся справа окне выберите элемент “Заливка”.

Изменение цвета фона формат фигуры в Word

3. В развернувшемся меню выберите пункт “Сплошная заливка”.

Изменение цвета фона параметры в Word

4. Нажав на значок “Цвет”, выберите желаемый цвет фигуры.

Изменение цвета фона выбор в Word

5. Кроме цвета вы также можете отрегулировать и уровень прозрачности объекта.

6. После того, как вы внесете необходимые изменения, окно “Формат фигуры” можно закрыть.

7. Цвет элемента блок-схемы будет изменен.

Измененный цвет фона блок-схемы в Word

На этом все, ведь теперь вы знаете, как сделать схему в Ворде 2010 — 2016, а также и в более ранних версиях этой многофункциональной программы. Инструкция, описанная в данной статье является универсальной, и подойдет к любой версии офисного продукта от Microsoft. Желаем вам высокой продуктивности в работе и достижения только положительных результатов.

Закрыть

Мы рады, что смогли помочь Вам в решении проблемы.

Отблагодарите автора, поделитесь статьей в социальных сетях.

Закрыть

Опишите, что у вас не получилось. Наши специалисты постараются ответить максимально быстро.

И как это сделать, если можно? Пытаюсь добавить макет схемы компоновки в расширение, он добавляется - но на редактирование не открывается.

(0) в смысле не открывается?

Я создавал макет - открывается пустой, когда в самом расширении пусто.
Или высыпает кучу ошибок, когда пихаешь туда готовый макет, но в расширении нет всех объектов, на которые ссылается СКД

Но чтоб совсем не открывался макет СКД - не видел такого.

Нажимаю ПКМ на макете схемы компоновки, делаю "добавить в расширение". Он добавляется.
Щелкаю дважды по этому добавленному в расширению макету - открывается окно параметров, где всего три параметра - имя, тип макета "схема компоновки данных" и принадлежность объекта "заимствованный".
Открыть на редактирование не получается.

Ага, речь идет именно про заимствование уже созданного в основной конфигурации СКД

А зачем он тебе на редактирование нужен, когда можно довольно просто и спокойно влепить через расширение свою собственную копию готового СКД и отредактировать его так, как тебе нужно?

з.ы. Я обычно делаю готовое СКД во внешнем отчете. И на финале встраиваю уже полностью готовое в расширение. Попытки его редактирования конструктором выдают слишком много дурных ошибок, а мне это не нужно - нужен результат, который достижим даже внешними отчетами, но их уже готовые реально удобней и красивей вызывать из встроенных в расширение.

(4) вариант СКД бывает гораздо проще встроить в дополнение к существующему, чем что-то с ним делать в расширении

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

(5) Это если отчет более-менее стандартный, а есть отчеты где всё гвоздями прибито и даже нет возможности гибких настроек.

Исходные данные

Несомненно, основная задача работы со сводными таблица - анализ данных. А раз мы что-то анализируем, значит может потребоваться и что-то изменить в случае нахождения каких-то расхождений. И самое печальное здесь то, что нельзя изменять значения непосредственно внутри сводной таблицы(OLAP не в счет :)). Зато мы можем посмотреть из каких строк исходной таблицы состоит конкретное значение.
Например, у нас есть таблица реализации следующего вида:

Сводная таблица

На основе её мы построили примерно такую сводную таблицу(как создать сводную можно посмотреть и прочитать в этой статье: Общие сведения о сводных таблицах):

Показать детали значения сводной таблицы

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

Таблица деталей

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

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

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

Но даже при всем этом: как-то это все долго и не очень удобно. Поэтому я решил пойти дальше и сделать все необходимое при помощи макросов(Visual Basic for Applications). Придется в них чуть-чуть вникнуть, но оно того стоит, т.к. для полного удобства мы сделаем вот что:

Собственный пункт Edit Source

  • по двойному клину на ячейке сводной таблицы автоматически отфильтруем данные в исходной таблице и перейдем в неё
  • после изменений в исходной таблице и возврата в сводную - автоматически обновим эту сводную таблицу
  • для большего удобства мы еще создадим в меню правого клика сводной таблицы свой собственный пункт меню "Edit Source", который будет делать то же самое, что и двойной клик

Т.е. можно сказать полностью заменим стандартный пункт "Показать детали".

Для этого создаем стандартный модуль (переходим в редактор VBA( Alt + F11 ) -Insert -Module) и вставляем в него код:

'--------------------------------------------------------------------------------------- ' Author : Щербаков Дмитрий(The_Prist) ' Профессиональная разработка приложений для MS Office любой сложности ' Проведение тренингов по MS Excel ' https://www.excel-vba.ru ' info@excel-vba.ru ' Purpose: '--------------------------------------------------------------------------------------- Option Explicit Sub EditPivotSource() Dim pt As PivotTable Dim wsDetails As Worksheet Dim rSource As Range, rDetails As Range Dim lAppCalc As Long Application.DisplayAlerts = False lAppCalc = Application.Calculation 'запоминаем установленный режим пересчета формул Application.Calculation = xlCalculationManual Application.ScreenUpdating = False On Error GoTo END_ 'определяем сводную таблицу и её исходные данные Set pt = ActiveCell.PivotTable Set rSource = Application.Evaluate(Application.ConvertFormula(pt.SourceData, xlR1C1, xlA1)) 'отображаем все данные в листе с исходными данными rSource.EntireRow.Hidden = False 'разрешаем отображение деталей, если запрещено настройками ' Параметры сводной таблицы -Данные -Разрешить отображение деталей If Not pt.EnableDrilldown Then pt.EnableDrilldown = True End If 'показываем лист с данными по выделенной области Selection.ShowDetail = True 'запоминаем лист с деталями - потом надо будет удалить Set wsDetails = ActiveSheet Set rDetails = ActiveSheet.UsedRange rSource.AdvancedFilter xlFilterInPlace, rDetails 'удаляем лист деталей - он больше не нужен wsDetails.Delete 'активируем лист с исходными данными - теперь там отображены только нужные строки rSource.Parent.Activate END_: If Err.Number <> 0 Then MsgBox "Выделите ячейку данных для редактирования", vbInformation, "www.excel-vba.ru" End If 'возвращаем измененные настройки приложения в прежние значения Application.DisplayAlerts = True Application.Calculation = lAppCalc Application.ScreenUpdating = True End Sub

Это основной код фильтрации данных в источнике данных на основании выделенной в сводной таблице ячейке.
Далее все в том же редакторе VBA переходим в модуль ЭтаКнига(ThisWorkbook) и вставляем туда следующий код:

Все, теперь останется только сохранить книгу в формате "Книга Excel с поддержкой макросов(.xlsm)" и открыть заново. Хотя это нужно лишь для того, чтобы создался новый пункт меню в сводную, весь остальной функционал будет работать и без перезапуска.
Надеюсь данный трюк будет полезен всем, кто работает со сводными.

Ну а если совсем лень делать что-то своими руками, то можно воспользоваться данной возможностью, уже встроенной в мою надстройку MulTex. Там же есть вариант отображения деталей всех выделенных ячеек, а не только одной, как это реализовано в самом Excel.

Работа с базами данных — процесс, требующий определённых навыков и понимания некоторых нюансов. Разработанная компанией Microsoft программа Access даёт пользователям возможность быстро создавать и редактировать БД. Один из важнейших моментов, с которым обязательно нужно разобраться, при создании БД — связывание её элементов. В этой статье разберёмся с тем, как создать или удалить связи между таблицами в Access. Давайте же начнём. Поехали!

Переход в конструктор таблицы из выпадающего меню

Пример связи один к одному между двумя базами данных

Связь многие ко многим через мастер подстановок Access

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

Читайте также: