Я откладывал разработку этой части своего приложения на какое-то время исключительно потому, что хочу сделать это по кругу, но мне кажется, что это плохая идея из того, что я помню, мои преподаватели рассказывали мне в школе.
У меня есть проект системы заказов, игнорирующий все, что не относится к этому примеру, с которым у меня осталось:
- CreditCard
- Клиент
- Заказать
Я хочу это так,
- Клиенты могут иметь кредитные карты (0-n)
- У клиентов есть заказы (1-н)
- Заказы на одного клиента (1-1)
- Заказы имеют одну кредитную карту (1-1)
- У кредитных карт может быть один клиент (1-1) (уникальные идентификаторы, поэтому мы можем игнорировать уникальность номера cc, муж / жена могут делиться экземплярами cc и т. Д.)
Обычно в последней части обнаруживается проблема, иногда кредитные карты отклоняются, и они хотят использовать другую, для этого необходимо обновить информацию о том, какая у них «текущая» карта, но это может изменить только текущую карту, использованную для этого. заказ, а не другие заказы, которые клиент может иметь на диске.
Фактически это создает круговую схему между тремя таблицами.
Возможные решения:
Или
Создайте круговую конструкцию, дайте ссылки:
- cc ref на заказ,
- ссылка клиента в куб. См.
- клиент ref на заказ
или
- ссылка клиента в куб. См.
- клиент ref на заказ
- создайте новую таблицу, которая ссылается на все три идентификатора таблицы, и поместите уникальные в ордер, чтобы только один cc мог быть текущим для этого ордера в любое время
По сути, оба моделируют один и тот же дизайн, но переводят по-разному, мне нравится последний вариант лучше всего в данный момент, потому что он кажется менее круглым и более центральным. (Если это даже имеет смысл)
Мои вопросы,
- Что если есть плюсы и минусы каждого?
- Каковы подводные камни круговых отношений / зависимостей?
- Это допустимое исключение из правила?
- Есть ли какая-то причина, по которой я должен выбрать первое поверх второго?
Спасибо и дайте мне знать, если есть что-то, что вам нужно уточнить / объяснить.
- Update / Edit -
Я заметил ошибку в заявленных мною требованиях. В основном упал мяч при попытке упростить вещи для SO. Там есть еще одна таблица для платежей, которая добавляет еще один слой. Подвох, Заказы могут иметь несколько платежей, с возможностью использования разных кредитных карт. (если вы действительно хотите знать даже другие формы оплаты).
Сказав это, я думаю, что основная проблема все та же, и это только добавляет еще один уровень сложности.