#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 июня.