Вопрос

У меня есть одна таблица транзакций, каждая транзакция имеет 5-6 контактов. Каждый контакт имеет одинаковые поля, такие как имя, адрес, ячейка, электронная почта и т. Д.

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

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

Мой вопрос: Должен ли я сделать 6 копий контакта для каждого типа контакта, или мне было бы лучше с 6 таблицами соединения (таблица только с 2 ID, чтобы я мог сделать присоединение)?

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

РЕДАКТИРОВАТЬ: Sample of Tables

Это было полезно?

Решение

Лучше всего нормализовать таблицы. Создайте таблицу contact_type с записью для каждого типа контакта. Затем создайте соединительную таблицу Contact_type_xref, которая содержит идентификатор из таблицы контактов и идентификатор из таблицы contact_type. Затем загрузите типы контактов, связанные с каждым контактом, в контакт_type_xref, и удалите дублирующие записи контактов из контакта. Вот пример:Schema Example. Анкет После того, как вы исправите дизайн базы данных, вы можете решить проблему с рамкой сущности (которая, вероятно, исчезнет).

Другие советы

Во -первых, это немного мусора, которая не признает многочисленных отношений между типами сущностей!

Если у вас есть так много иностранных ключей, скорее всего, у вас будет больше (или меньше) в будущем. Решение @WIL Подробности позволит вам достичь этого без изменений схемы.

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

create view Manufacture as
select
    ContactID as ManufactureID,
    FirstName,
    LastName,
    ...etc.
from Contacts

Может работать или не работать, в зависимости от того, как ваша структура взаимодействует с базой данных.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с dba.stackexchange
scroll top