Связь многие-ко-многим: пример в access, в sql. как сделать связь многие-ко-многим?

Тестирование связи «многие ко многим»Testing Many-to-Many

При задании в кубе связи «многие ко многим» тестирование результатов является обязательным.When you define a many-to-many relationship in a cube, testing is imperative to ensure queries return expected results. Необходимо тестировать куб с помощью клиентского приложения, которое будут использовать конечные пользователи.You should test the cube using the client application tool that will be used by end-users. В следующей процедуре мы откроем куб в Excel, чтобы проверить результаты запросов.In this next procedure, you will use Excel to connect to the cube and verify query results.

Откройте куб в ExcelBrowse the cube in Excel

Разверните проект, затем откройте куб, чтобы подтвердить правильность выполнения агрегирований.Deploy the project and then browse the cube to confirm the aggregations are valid.

В Excel щелкните данные | из других источников | Analysis Services.In Excel, click Data | From Other Sources | From Analysis Services. Введите имя сервера, выберите базу данных и куб.Enter the name of the server, choose the database and cube.

Создайте сводную таблицу, которая использует следующее:Create a PivotTable that uses the following:

Sales Amount как значениеSales Amount as the Value

Sales Reason Name для столбцовSales Reason Name on Columns

Sales Order Number для строкSales Order Number on Rows

Проанализируйте результаты.Analyze the results. Мы используем примеры данных, поэтому на первый взгляд кажется, что все заказы на продажу имеют одинаковые значения.Because we are using sample data, the initial impression is that all sales orders have identical values. Но если выполнить прокрутку результатов вниз, то можно видеть разброс данных.However, if you scroll down, you begin to see data variation.
Немного ниже вы увидите сумму продаж и причины для заказа с номером SO5382.Part way down, you can find the sales amount and sales reasons for order number SO5382
Общая сумма этого заказа — 539,99, а в качестве причин указаны Promotion, Other и Price.Grand total of this particular order is 539.99, and the purchase reasons attributed to this order include Promotion, Other and Price.

Обратите внимание, что столбец Sales Amount для этого заказа вычислен правильно; здесь показано 539,99 за весь заказ.Notice that the Sales Amount is correctly calculated for the order; it is 539.99 for the entire order

Хотя 539,99 указано для каждой причины, это значение не суммируется для всех трех причин, что привело бы к ошибке в общем итоге.Although 539.99 is indicated for each reason, that value is not summed for all three reasons, erroneously inflating our grand total.
А зачем вообще помещать сумму продаж под каждой причиной продажи?Why put a sales amount under each sales reason in the first place? Это позволяет идентифицировать объем продаж, который можно приписать каждой причине.The answer is that it allows us to identify the amount of sales we can attribute to each reason.

Выполните прокрутку до нижней части листа.Scroll to the bottom of the worksheet
Теперь хорошо видно, что Price (Цена) является самой важной причиной для покупок клиентов по сравнению с другими причинами и общей суммой.It is now easy to see that Price is the most important reason for customer purchases, relative to other reasons as well as the grand total.

В чём преимущества

Базы дан­ных и их систе­мы управ­ле­ния зато­че­ны на рабо­ту с боль­шим объ­ё­мом дан­ных и от лица боль­шо­го чис­ла поль­зо­ва­те­лей. Сей­час вы поймёте.

Ско­рость — ещё одно пре­иму­ще­ство базы дан­ных. База дан­ных устро­е­на так, что она лег­ко и быст­ро нахо­дит, запи­сы­ва­ет, пере­пи­сы­ва­ет и сно­ва нахо­дит дан­ные. Всё пото­му, что СУБД все­гда зна­ет, что где лежит и по како­му кри­те­рию искать. Там не будет слу­чай­ных дан­ных в слу­чай­ном месте.

Ско­рость важ­на ещё и пото­му, что СУБД обыч­но обслу­жи­ва­ет сра­зу мно­го пото­ков: одно­вре­мен­но ей могут поль­зо­вать­ся десят­ки и сот­ни тысяч чело­век, поэто­му ей неко­гда копать­ся. В хоро­шо сде­лан­ных БД всё молниеносно.

Слож­ность. Базы дан­ных нуж­ны в чис­ле про­че­го для хра­не­ния слож­но струк­ту­ри­ро­ван­ных дан­ных. Мы при­вык­ли думать, что база дан­ных — это такая таб­ли­ца, где есть стро­ки и столб­цы. Но база дан­ных при пра­виль­ной орга­ни­за­ции может намно­го больше:

  • Свя­зы­вать одну еди­ни­цу дан­ных с мно­же­ством дру­гих. Напри­мер, если один чело­век совер­шил мно­го зака­зов со мно­же­ством това­ров внут­ри каж­до­го, база дан­ных спо­соб­на хра­нить и обра­ба­ты­вать такие связи.
  • База может хра­нить дере­во дан­ных — вро­де того, о кото­ром мы писа­ли недав­но. Попро­буй в реаль­ной жиз­ни похра­нить дерево!
  • В базах могут жить ссыл­ки на дру­гие фраг­мен­ты и отде­лы базы.

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

Связь типа «один-к-одному»

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

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

Рис. 3.2. Связи между таблицами в БД Деканат

Организация информации в реляционной базе данных

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

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

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

Чаще всего при работе с БД выполняются три основных правила нормализации, что относит базу данных к:

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

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

Узнать более подробно об организации информации в реляционных базах данных все желающие смогут в рамках профессиональной подготовки по курсу «Инструментальные средства бизнес-аналитики», которую проводит ВШБИ НИУ ВШЭ. Записаться на обучение по данному курсу можно на нашем сайте.

База данных Кинга

Эта учебная база данных представляет собой сведения о корпорации Кинга. Среди таблиц:

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

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

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

Когда может быть использована связь многие-ко-многим?

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

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

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

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

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

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

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

Разные базы — разные правила

Внут­ри каж­дой базы дан­ных и её управ­ля­ю­щей систе­мы свои стро­гие правила:

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

Рабо­чая ситу­а­ция: допу­стим, вы рабо­та­е­те в бан­ке и откры­ли кар­точ­ку кли­ен­та, что­бы поме­нять ему кре­дит­ный лимит. В этот же момент дру­гой сотруд­ник из сосед­не­го офи­са тоже хочет поме­нять лимит это­му же кли­ен­ту, но уже на дру­гую сум­му. Как база отре­а­ги­ру­ет на такое? Долж­на ли она раз­ре­шать вто­ро­му сотруд­ни­ку откры­вать кар­точ­ку или её нуж­но забло­ки­ро­вать, пока пер­вый не закон­чит? А если она раз­ре­шит открыть кар­точ­ку, то что будет, если двое сотруд­ни­ков напи­шут там раз­ный лимит — какой из них сохра­нять в ито­ге? СУБД зада­ёт эти пра­ви­ла и сле­дит за их выполнением.

База данных Кинга

Эта учебная база данных представляет собой сведения о корпорации Кинга. Среди таблиц:

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

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

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

Просмотр куба и измерения «многие ко многим»Browsing the Cube and the Many-to-Many Dimension

В меню Сборка выберите команду Развернуть Analysis Services Tutorial.On the Build menu, click Deploy Analysis Services Tutorial.

После успешного завершения развертывания перейдите на вкладку Браузер в конструкторе кубов Службы Analysis ServicesAnalysis Services Tutorial и нажмите кнопку Повторное соединение.When deployment has successfully completed, switch to the Browser tab in Cube Designer for the Службы Analysis ServicesAnalysis Services Tutorial cube, and then click Reconnect.

В область данных панели «Данные» добавьте меру Продажи через Интернет — объем продаж .Add the Internet Sales-Sales Amount measure to the data area of the data pane.

Добавьте определенную пользователем иерархию Причины покупки из измерения Причина покупки в область строк панели данных.Add the Sales Reasons user-defined hierarchy from the Sales Reason dimension to the row area of the data pane.

На панели метаданных разверните узлы Заказчик, Расположение, География заказчика, Члены, Все заказчики, Австралия, щелкните правой кнопкой мыши элемент Квинсленди выберите команду Добавить в фильтр.In the metadata pane, expand Customer, expand Location, expand Customer Geography, expand Members, expand All Customers, expand Australia, right-click Queensland, and then click Add to Filter.

Раскройте каждый из элементов уровня Sales Reason Type , чтобы просмотреть суммы в долларах для каждой из причин, которые выдвинул заказчик из штата Квинсленд (Queensland) в обоснование покупки товара Adventure WorksAdventure Works через Интернет.Expand each member of the Sales Reason Type level to review the dollar values that are associated with each reason a customer in Queensland gave for their purchase of an Adventure WorksAdventure Works product over the Internet.
Обратите внимание, что итоговые суммы по каждой из причин покупки в совокупности больше, чем общая сумма продаж.Notice that the totals that are associated with each sales reason add up to more than the total sales. Это вызвано тем, что некоторые заказчики указали несколько причин покупки.This is because some customers cited multiple reasons for their purchase.
На следующем рисунке показаны панели конструктора кубов Фильтр и Данные .The following image shows the Filter pane and Data pane of Cube Designer.

Виды и характеристика HDMI кабеля

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

Существует несколько видов кабеля.

Стандартный

При подключении передаётся высокое качество картинки и звука. Используется для подключения спутниковых и цифровых тюнеров а также DVD-проигрывателей.

Стандартный с Ethernet

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

Данный кабель подключает к интернету камеру, PlayStation и т. д.

High Speed

Используется для передачи формата 3D, с углублённой цветопередачей и в Ultra HD. Звук в высоком качестве также обеспечивает данный провод. 4K формат можно смотреть также с данным шнуром (4096 X 2160).

High Speed + Ethernet

Идентифицирующая и неидентифицирующая связи

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

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

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

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

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

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

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

делы.

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

СВЯЗИ между внешним ключом в таблице Сотрудники и первичным клю-

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

«Один-ко-многим» (1→∞).

Определение связи «многие ко многим»Defining the Many to Many Relationship

Переключитесь в конструкторе кубов на куб Службы Analysis ServicesAnalysis Services Tutorial и откройте вкладку Использование измерений .Switch to Cube Designer for the Службы Analysis ServicesAnalysis Services Tutorial cube, and then click the Dimension Usage tab.
Обратите внимание, что измерение Sales Reason имеет обычную связь, определенную группой мер Internet Sales Reason , но не имеет связи, определенной группами мер Internet Sales или Reseller Sales .Notice that the Sales Reason dimension has a regular relationship defined with the Internet Sales Reason measure group, but has no relationship defined with the Internet Sales or Reseller Sales measure groups. Обратите внимание, что измерение Подробности заказа через Интернет имеет обычную связь, определенную измерением Причина продажи через Интернет , которое в свою очередь имеет Fact Relationship с группой мер Internet Sales .Notice also that the Internet Sales Order Details dimension has a regular relationship defined with the Internet Sales Reason dimension, which in turn has a Fact Relationship with the Internet Sales measure group

Если измерение не найдено (или не найдено другое измерение со связью с обеими группами мер: Причина покупки через Интернет и Продажи через Интернет ), не получится определить связь «многие ко многим».If this dimension was not present (or another dimension with a relationship with both the Internet Sales Reason and the Internet Sales measure group were not present), you would not be able to define the many-to-many relationship.

Щелкните ячейку на пересечении группы мер Продажи через Интернет и измерения Причина покупки , а затем нажмите кнопку обзора (…).Click the cell at the intersection of the Internet Sales measure group and the Sales Reason dimension and then click the browse button (…).

В диалоговом окне Задание связи в списке Выберите тип связи укажите значение Многие ко многим .In the Define Relationship dialog box, select Many-to-Many in the Select relationship type list.
Требуется определить промежуточную группу мер, соединяющую измерение Sales Reason и группу мер Internet Sales.You have to define the intermediate measure group that connects the Sales Reason dimension to the Internet Sales measure group.

В списке Промежуточная группа мер выберите значение Internet Sales Reason.In the Intermediate measure group list, select Internet Sales Reason.
На следующем рисунке отражены изменения, сделанные в диалоговом окне Задание связи .The following image shows the changes in the Define Relationship dialog box.

Нажмите кнопку ОК.Click OK.
Обратите внимание на значок «многие ко многим», который отражает связь между измерением Sales Reason и группой мер Internet Sales.Notice the many-to-many icon that represents the relationship between the Sales Reason dimension and the Internet Sales measure group.

Microsoft Access

Офисный программный продукт от «Майкрософт» известен на рынке ПО уже довольно продолжительное время. Он поставляется вместе с текстовым редактором Worfd, табличным процессором Excel и прочими, входящими в линейку «офиса». Можно Access (читается как «аксес«, дословный перевод — «доступ») приобрести и отдельно от его «коллег». Рекомендуется купить, разумеется, лицензионный софт, но ни для кого не секрет, сколько пиратских репаков можно найти на просторах Сети, в виде обычных файлов или раздач торрентов. «Майкрософт Аксес» доступен даже в портативной сборке. Она, не требующая инсталляции и особых навыков работы с ПК, лучше всего подходит для выбора, если ПО не будет использоваться продолжительно и часто.

Из контекста ясно, что «Майкрософт Аксес» — это система управления базами данных. Причем одна из популярнейших. Она является реляционной, что значит, она основана на логической модели данных, которая в ходе своей работы обращается к теории множеств и логике первого порядка. Связь многие-ко-многим в Access (примеры будут даны в ходе объяснения) реализуется очень и очень просто. Рассмотрим ее.

Роль связи многие-ко-многим

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

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

Роль связи многие-ко-многим

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

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

Для чего нужны

Вот основ­ные зада­чи БД на при­ме­ре гардеробной:

  • Сохра­нить наши дан­ные по запро­су — что­бы вы мог­ли открыть дверь, пове­сить курт­ку, закрыть дверь и боль­ше не думать ни о курт­ке, ни о гардеробной.
  • Изме­нить наши дан­ные по запро­су — что­бы мож­но было лег­ко извлечь из гар­де­роб­ной все дыря­вые нос­ки и поло­жить на их место целые.
  • Най­ти эти дан­ные по запро­су — что­бы быст­ро най­ти при­лич­ный пиджак или пар­ный носок.
  • Не дать про­чи­тать эти дан­ные тем, кому не сле­ду­ет, а кому надо — дать. Напри­мер, млад­ший брат может смот­реть на ваши крос­сов­ки, но не может их брать. А девуш­ка (или парень) может поло­жить свои вещи, но толь­ко на опре­де­лён­ную полку.
  • Под­дер­жи­вать поря­док и не дать захла­мить­ся — если вам было лень и вы про­сто кину­ли тол­стов­ку куда попа­ло, что­бы гар­де­роб­ная либо сама нашла, куда эту тол­стов­ку пра­виль­но поло­жить, либо ска­за­ла: «Э БРАТ ЗАЧЕМ ЗАХЛАМЛЯЕШЬ ПОЛОЖИ НОРМАЛЬНО ДАВАЙ»
  • Мас­шта­би­ро­вать­ся — что­бы вы мог­ли про­сто вешать в гар­де­роб­ную вещи и не думать об объ­ё­ме полок.
  • Не поте­рять дан­ные — если квар­ти­ра будет гореть, при­лич­ная гар­де­роб­ная не долж­на даже нагреть­ся. Или, если она всё-таки горит, что­бы где-то в защи­щён­ном под­зем­ном гара­же была точ­ная копия этой гар­де­роб­ной со все­ми акту­аль­ны­ми вещами.

Что такое мощность отношений?

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

 

Два значения 1 или * говорят о том, что поле в этой взаимосвязи имеет определенное число значения на строку в этой таблице. Давайте проверим это на примере.

В таблице Stores у нас есть одно уникальное значение для stor_id на строку.

 

Таким образом, если это поле участвует в одной стороне отношения, то эта сторона примет 1 в качестве показателя кардинальности, который называется ОДНОЙ стороной отношения.

Однако stor_id в таблице Sales не уникален для каждой строки данных в этой таблице. У нас есть несколько строк для каждого stor_id. Или скажем так; в каждом магазине происходит несколько торговых транзакций (что, конечно, нормально):

 

Таким образом, если stor_id в таблице Sales является частью отношения, эта сторона отношения станет *, или то, что мы называем «МНОЖЕСТВЕННОЙ» стороной отношения.

Итак, основываясь на том, что мы знаем в данный момент, если мы создадим отношение на основе stor_id между двумя таблицами Sales и Stores, то получим вывод:

 

Эти отношения могут быть прочитаны двумя способами;

  • Отношение “один-ко-многим” (1- *) из таблицы магазинов в таблицу продаж
  • Отношение «многие-к-одному» (* -1) из таблицы продаж в таблицу магазинов

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

Когда может быть использована связь многие-ко-многим?

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

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

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

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

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

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

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

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

Связь вида 1:М

Определение 3

Связь 1:М создается, если одной записи основной таблицы соответствуют более одной записи вспомогательной таблицы.

Пример 3

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

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

Если сопоставить записи таблиц по полю Код, то получим новые псевдозаписи. Например, псевдозапись (a, CD-ROM, Acer, да).

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

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

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

Adblock
detector