Arhn - архитектура программирования

концепция составного первичного ключа в базе данных Adventure Work

Интересно узнать, почему таблица адресов электронной почты в рабочей базе данных Adventure использует составной первичный ключ (BusinessEntityID, EmailAddressID (Identity))? если это что-то связано с установкой индекса кластера для обоих полей, я был бы признателен, если бы рассказал мне, как физически хранится составной первичный ключ (в каком порядке и как вставляются данные)?

введите описание изображения здесь


Ответы:


1

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

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

Обновление:

Здесь задействованы 2 таблицы, Person и EmailAddress.

Каждая запись в Person обозначается BusinessEntityID. Чтобы связать запись из Person с записью в другой таблице T, достаточно включить в эту таблицу T столбец, который ссылается на BusinessEntityID. Теперь, если нам нужно было гарантировать, что все записи в T должны быть связаны с некоторой записью в Person, тогда мы поместим ограничение внешнего ключа на T.BusinessEntityID и сделаем его не допускающим значения NULL. Если вдобавок к этому мы хотели убедиться, что каждая запись в T должна быть связана с одной и только одной записью в Person, тогда мы могли бы установить ограничение уникальности для столбца T.BusinessEntityID.

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

Проиллюстрировать:

Person (BusinessEntityID, Name) and PK is BusinessEntityID
---------------
1 | John
---------------
2 | Jane
---------------
3 | Sales Team



EmailAddress (BusinessEntityID, EmailAddressID, EmailAddress) and PK is [Business EntityID, EmailAddressID] where EmailAddress is auto-incremented
--------------
1 | 1 | [email protected]
------------------------
1 | 2 | [email protected]
------------------------
2 | 3 | [email protected]
------------------------
2 | 4 | [email protected]
------------------------
1 | 5 | [email protected]
------------------------
2 | 6 | [email protected]
------------------------
3 | 7 | [email protected]

Данные, аналогичные приведенным выше, можно поместить в таблицы в вашем примере. Что здесь происходит?

Есть 3 объекта: Джон, Джейн и отдел продаж.

У Джона есть 2 личных адреса электронной почты. У Джейн также есть 2 личных адреса электронной почты. Кроме того, электронное письмо address [email protected] принадлежит отделу продаж, а также Джону и Джейн.

Это отношения "многие ко многим".

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

30.01.2013
  • спасибо за ответ, но если бы мы не использовали BusinessEntityID в качестве первичного ключа (просто у нас был EmailAddressID), я думаю, что все же мы могли бы иметь один и тот же адрес для нескольких человек и наоборот. я прав? 30.01.2013
  • правильно ли мы думаем, что два поля в таблице связаны как отношения «многие ко многим»? потому что, если бы BusinessEntityID в EmailAddress не был первичным ключом (был просто FK), у нас все равно было бы много писем для одного человека и много людей для одного и того же письма. 31.01.2013
  • Фактически, вы абсолютно правы. На самом деле я не могу придумать вескую причину, по которой они построили PK таблицы EmailAddress таким образом. Обычно, если у вас есть две таблицы A с A.Id и B с B.Id, и вам нужна связь «многие ко многим» между A и B, вы создаете третью таблицу C с C.AId и C.BId, и вы можете создать (AId, BId) the PK for C`, а также настроить FK. для AId и BId, чтобы обеспечить ссылочную целостность. Это явно не то, что здесь происходит. Мои извинения за то, что я ввел вас в заблуждение в своем ответе. 01.02.2013

  • 2

    Это из-за состава, один адрес электронной почты не может существовать без человека. Итак, BusinessEntityID также является первичным ключом для таблицы EmailAddress.

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

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..