Хорошо, я сейчас готовлю таблицу для "Коробок".
Теперь элемент ящика, в зависимости от того, для чего он используется / статус предмета, может в конечном итоге быть связан с ящиком «Доставка» или ящиком «Возврат».
Элемент Box может быть неисправен: если это так, в строке Элемента Box будет установлен флаг (IsDefective), а Элемент Box будет помещен в поле «Returns» (с другими элементами, которые должны быть возвращены этому поставщик). В противном случае, элемент Коробки в конечном итоге будет помещен в коробку «Доставка» (вместе с другими отправляемыми элементами). (Обратите внимание, что у ящиков «Доставка» и «Возврат» есть свои собственные таблицы: для всех ящиков не существует одной общей таблицы ... хотя, возможно, я должен рассмотреть возможность сделать это, если это возможно, в качестве третьей возможности?)
Может быть, я просто сегодня плохо соображаю, но я начал сомневаться, что делать в этой ситуации.
Моя интуиция говорит мне, что у меня должно быть отдельное поле для каждого возможного отношения, даже если в любой момент времени может произойти только одно из отношений, из-за чего схема для элементов Box будет выглядеть следующим образом:
BoxItemID
Описание
IsDefective
ShippingBoxID
ReturnBoxID
и т.д ...
Это прояснит отношения, но кажется расточительным (поскольку в любой момент будет использоваться только одно из отношений). Тогда я подумал, что мог бы иметь только одно поле для BoxID и определить, на какой BoxID он ссылается (идентификатор отправления или возврата) на основе поля IsDefective:
BoxItemID
Описание
IsDefective
BoxID
и т.д ...
Это кажется менее расточительным, но не подходит мне. Отношение не очевидно.
Итак, я поставлю это перед вами, гуру баз данных Stackoverflow. Что бы вы сделали в этой ситуации?
РЕДАКТИРОВАТЬ: Спасибо всем за ваш вклад! Это дает мне много думать. Во-первых, я собираюсь использовать ORM в следующий раз, когда начну такой проект. =) На двоих, так как я не сейчас, я укушу четыре байта и использую два поля.
Еще раз всем спасибо!