2013-10-27 4 views
0

Я новичок в базах данных на всех, и есть некоторые трудности с установкой отношения между 3 таблицами в MS Access 2013.отношения между таблицами в MS Access

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

  • 1-й стол - Учетные записи: AccountID (PK) | AccountName | Язык | Страна | Электронная почта
  • 2-й стол - Звонки: CallID (PK) | Аккаунт | Ответ | Комментарий | Дата
  • 3-й стол - Ответы: ResponseID (PK) | Ответ
+0

Можете ли вы объяснить, что вы имеете в виду под 'отношения'? Вы хотите установить Первичные ключи с помощью внешних ключей в других таблицах? – Leon

+0

Я думаю, что у меня есть идея FK и PK (если нет, пожалуйста, поправьте меня), но я имею в виду отношения между разными полями. Например: (1-я таблица) AccountID- (2-я таблица) Учетная запись: одна для многих. –

ответ

1

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

Предположим, у вас есть таблица Accounts, и у нее есть поле AccountID в качестве Первичного ключа. Это поле уникально (это означает, что для этого поля нет дублирующегося значения).

Теперь у вас есть другой стол под названием Calls, и у вас есть поле Foreign Key под названием AccountID, которое указывает на таблицу Accounts.

По существу у вас есть Accounts со следующими данными:

AccountID| AccountName | Language | Country | Email 

1  | FirstName | EN  | US  | [email protected] 
    2  | SecondName | EN  | US  | [email protected] 

Теперь у вас есть другая таблица Calls с Многие звонки

CallID(PK) | AccountID(FK) | ResponseID(FK) | Comment | Date 

1  | 1    | 1    | a comment | 26/10 
    2  | 1    | 1    | a comment | 26/10 
    3  | 2    | 3    | a comment | 26/10 
    4  | 2    | 3    | a comment | 26/10 

Вы можете видеть отношения «Один для многих»: один идентификатор учетной записи (в моем примере AccountID = 1) для многих вызовов (в моем примере 2 строки с AccountID = 1 в качестве внешних ключей, строки 1 & 2) и AccountID = 2 имеет также 2 ряда вызовов (строки 3 и 4)

То же самое относится и к Responses таблице

+0

Это здорово, это отлично сработает для меня, но когда я попытаюсь создать эту взаимосвязь (между таблицами Учетные записи и вызовы), я получил сообщение об ошибке «Отношения должны быть одинакового количества полей с одинаковыми типами данных». Я проверяю оба типа данных, и они являются «Числоми». Кроме того, позвольте мне упомянуть, что таблица вызовов в данный момент пуста. И последнее, что я могу сделать, если я хочу ввести учетную запись в таблицу вызовов, а не по номеру, а имя учетной записи. –

+0

Поле в вызовах должно быть типа Long-Integer, а поле PK в учетных записях должно быть типа AutoNumber – Leon

+0

Спасибо, леонид, я понимаю, что я понимаю концепцию, и теперь все работает нормально. Есть еще одна вещь, с которой я столкнулся. Интересно, как это сделать при вводе нового объекта в таблицу «Вызовы», а не для использования AccountID, но имена учетных записей (причина: проще работать с именами вместо цифр) и сохранить текущее отношение? –

0

Используя эту таблицу структуру:

Accounts : AccountID(PK) | AccountName | Language | Country | Email 
Calls : CallID(PK) | AccountID(FK) | ResponseID(FK) | Comment | Date 
Responses: ResponseID(PK) | Response 
  • Accounts.Ac countID ссылается на Calls.AccountID. 1: n - много вызовов для одной учетной записи, но каждый вызов относится только к одной учетной записи.
  • Responses.ResponseID ссылается на Calls.ResponseID. 1: n - многие вызовы могут получить один и тот же ответ от подготовленного набора, но каждый вызов получает ровно один из них.
+0

Благодарим вас за ответ и объяснения Palec, +1. Я справляюсь с этим благодаря вам, ребята, но теперь у меня есть новая «гора, чтобы подняться». Пожалуйста, просмотрите мой комментарий в ответ leonid для получения более подробной информации. Спасибо заранее! –

Смежные вопросы