2014-09-12 2 views
1

У меня есть несколько таблиц: company, customer, company_has_customer и transaction.Таблица внешних контактов MySQL

company_has_customer - таблица соединений многих-ко-многим, в которой используются PK company и customer как ее ПК.

Практически во всех ситуациях по всей базе данных используются как company, так и customer, для идентификации записи (например, в таблице transaction).

Мой вопрос, должен ли я создать внешний ключ в transaction таблице, чтобы указать на company_has_customer или двух таблиц (company, customer) в индивидуальном порядке?

Я считаю, что было бы лучше для ссылочной целостности отправлять эти FK через company_has_customer, чтобы гарантировать, что записи transaction вставляются только в том случае, если есть отношения между компанией и клиентом. Существуют ли какие-либо стандарты или соглашения для поддержки моей догадки?

+0

SO не подходит для самоутверждаемых обсуждений дизайна. – Barmar

+0

Спасибо, Barmar, я изменил вопрос, чтобы быть менее самоуверенным. Я действительно ищу лучших практик в подобной ситуации, но у меня сильные судороги. –

+0

Возможно, вам повезет больше на dba.stackexchange.com. – Barmar

ответ

0

Вот как обдумать проблему. Имеет ли транзакция отдельное отношение к компании и клиенту? Или это транзакция, характерная для отношений между компанией и клиентом навсегда?

Я бы предположил, что это первый случай.

Конкретная ситуация, о которой нужно подумать: что произойдет, если отношения между клиентом и компанией меняются после сделка происходит? Сохраняет ли транзакция оригинальную компанию или переключается на новую компанию? Или это признано недействительным?

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

+0

Взаимосвязь между компанией и клиентом существует во многих предлагаемых таблицах. По существу, данные между клиентом и компанией всегда будут принадлежать этой комбинации компаний/клиентов. Достаточно, чтобы было проще добавить FK в таблицу клиентов с идентификатором компании. M2M просто обеспечивает некоторый уровень будущих вариантов. –

+0

@KyleJohnson. , , В этом случае отношения - это «клиент», и вы можете искать компанию оттуда. –

+0

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

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