Я откладывал разработку этой части своего приложения на какое-то время, потому что я хочу сделать это круговым способом, но чувствую, что это плохая идея из того, что я помню, когда мои преподаватели рассказывали мне в школе.Циклические связи баз данных. Хорошо, плохо, Исключения?
У меня есть дизайн для системы заказа, не обращая внимания на все, что не относится к этому примеру, я оставил с:
- CreditCard
- Заказчик
- Заказать
Я хочу так, чтобы
- Cust гомор может иметь кредитные карты (0-п)
- Клиентов имеют заказы (1-п)
- Заказов имеют один клиент (1-1)
- Заказов одна кредитной карты (1-1)
- кредита карты могут иметь один клиент (1-1) (уникальные идентификаторы, чтобы мы могли игнорировать уникальность номера куб.см, муж/жена может поделиться куб.см экземпляров ECT)
в основном последняя часть, где проблема проявляется, иногда кредит карты отклоняются, и они хотят использовать другую, это должно обновить, какая их «текущая» карта, но это может изменить только текущую карту, используемую для t а не другие заказы, которые клиент может иметь на диске.
Эффективно это создает круговую конструкцию между тремя таблицами.
Возможные решения: Либо
Создание круговой дизайн, дать ссылки:
- куб.см ссылка на заказ,
- клиент ссылка на сс
- клиента реф заказать
или
исх 0- клиенту сс
- клиента реф заказать
- создать новую таблицу, которая ссылается на все три таблицы идентификаторов и поставить уникальный по порядку, так что только один куб может быть тока в таком порядке в любое время
По существу, оба модели одинаковы, но переводить по-другому, мне нравится последний вариант лучше всего на данный момент времени, потому что он кажется менее круглым и более центральным. (Если что даже имеет смысл)
Мои вопросы,
- Что делать, если какой-либо плюсы и минусы каждого из них?
- Каковы подводные камни круговых связей/зависимостей?
- Является ли это допустимым исключением из правила?
- Есть ли какая-то причина, по которой я должен выбрать бывшего над последним?
Спасибо и дайте мне знать, если вам что-то необходимо разъяснить/объяснить.
--update/Edit--
Я заметил ошибку в требованиях я заявленных. В принципе, выпал мяч при попытке упростить вещи для SO. Для Платежей есть еще одна таблица, которая добавляет другой слой. Улов, Заказы могут иметь несколько платежей, с возможностью использования разных кредитных карт. (если вы действительно хотите узнать даже другие способы оплаты).
Сформулируйте это здесь, потому что я думаю, что основная проблема остается прежней, и это действительно добавляет еще один уровень сложности.
+1. хороший, ясный ответ. –
Спасибо, для уточнения, вы имеете в виду детали cc c магазином с заказом в TOS в новой таблице, эффективно сохраняя его избыточно (не так уж плохо в этом случае)? Или вы имели в виду просто держать ссылку на таблицу СС? – Louis
Чтобы уточнить это, он должен быть в новой таблице, так как таблица заказов не может быть изменена, чтобы содержать детали CC, поскольку мы имеем дело с другими типами платежей. – Louis