2014-02-12 2 views
0

У меня есть таблица с компонентами, другие заказы на работу и другие с RepairTask. Отношение задачи с компонентами 1: N, одна задача - только один компонент. И задачи имеют отношение 1: N с рабочими заказами, потому что задача может быть только в одном рабочем порядке. Взаимосвязь между компонентами и рабочими заказами N: N, поскольку одно рабочее задание может влиять на многие компоненты.тройственные отношения против цикла, что лучше?

Я хотел бы знать:

Рабочий порядок, в котором компонент отремонтированного Задача, которую получили компонент. Задача, которую я выполнил в рабочем порядке.

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

ВАРИАНТ 1: отношения цикла

Components(IDComponent, ...) 
WorkOrders(IDWorkOrder, IDComponent, ...) 
Tasks(IDTask, IDComponent, IDWorkOrder, ...) 
ComponetsHasWorkOrders(IDComponent, IDWorkOrder) 

ВАРИАНТ 2: тройная связь

Components(IDComponent, ...) 
WorkOrders(IDWorkOrder, ...) 
Tasks(IDTask, ...) 
CompoentsHasWorkOrdersAndTasks(IDComponent, IDWorkOrder, IDTask) 

В этом втором варианте я установил, что IDTask должен быть уникальным, так как задача была только в одной работе порядок и в одном компоненте. Таким образом, я гарантирую соотношение 1: N между задачами и компонентами и 1: N между workOrders и Tasks.

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

Но я не знаю, лучше ли троичные отношения или отношения цикла.

Есть любое другое решение?

Спасибо.

+0

это не правда, что вы можете просто присоединиться к первой модели и получить ответ? – Randy

ответ

2

Примечание: OrderTaskNo in Task Таблица представляет собой целое число; для каждого OrderID есть OrderTaskNo {1,2,3, ...}

enter image description here

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