Вопрос по Microsoft Access — Не удается связать первичный и внешний ключ

#database #ms-access

#База данных #ms-access

Вопрос:

Я столкнулся с вопросом, касающимся первичных ключей и внешних ключей в MS Access. У меня есть две таблицы, Customer и Sales.

У клиента есть три атрибута:
CustomerID (короткий текст, который является моим первичным ключом),
FirstName (короткий текст)
LastName (короткий текст)

Sales имеет следующие атрибуты:
SalesID (номер) является первичным ключом
ProductID (номер) должен быть внешним ключом
CustomerID (короткий текст) должен быть внешним ключом
(…)

Теперь вот моя проблема: могут быть дубликаты CustomerID, поскольку они могут покупать несколько товаров. Я не могу установить идентификатор пользователя внешнего ключа в таблице Sales на идентификатор пользователя первичного ключа в таблице CustomerTable, потому что могут быть дубликаты.

У вас есть какие-либо идеи, как решить эту проблему?

Комментарии:

1. Я не могу установить идентификатор пользователя внешнего ключа в таблице Sales на идентификатор пользователя первичного ключа в таблице CustomerTable, потому что могут быть дубликаты да, вы можете. Это назначение внешнего ключа.

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

3. Зачем использовать текстовые поля как PK и FK? Таблицы находятся в Access или SQLServer?

Ответ №1:

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

Если в каждой продаже может быть несколько товаров, тогда вам нужна другая таблица под названием SaleDetails с полями:

SalesID_FK (длинный номер)
ProductID_FK (длинное число)
Количество (длинное число)

Таблица продаж имела бы:

SaleID_PK (автоматический номер)
CustomerID_FK (длинный номер)
Дата продажи (дата / время)

Используйте автоматический номер для первичного ключа в клиентах:

CustomerID_PK (автономер)
CustomerAcct (короткий текст)
и т. Д

Комментарии:

1. Большое вам спасибо за вашу любезную помощь всем, особенно 7 июня.