2010-04-15 3 views
0

Мне нужно создать базу данных для обработки форм.Проблема проектирования базы данных: промежуточная таблица между двумя таблицами может закончиться слишком большим количеством результатов.

В принципе, форма должна пройти (точно) 7 человек, один за другим. Каждый человек может либо согласиться, либо отклонить форму.
Если кто-то снижается, цепь останавливается, и следующие люди даже не получают уведомление, что там is a форма.

Прямо сейчас я подумал о тех трех таблицах: ФОРМА, ЧЕЛОВЕК И ОТВЕТСТВЕННОСТЬ между ними. Однако мое первое решение кажется слишком тяжелым, потому что каждая форма может содержать до 7 ответов.

v1
Здесь мы находимся со столом между ними. Это означает, что каждая успешная форма имеет 7 строк в таблице RESPONSE.

v2
Здесь у нас есть ответная информация непосредственно внутри формы. Он выглядит уродливым, но, по крайней мере, сохраняет все как можно более необычным. На плохой стороне я не могу отслеживать даты ответа, но я не думаю, что это важно для этого.

Что вы думаете об этом? Я чувствую, что оба они ошибаются, и я не знаю, как это исправить.
Если это имеет значение, я буду использовать Oracle 9.

+0

Я не могу отметить оба ответа как ответ, но я думаю, что они были очень полезны. Спасибо. –

ответ

3

Из этих двух, я бы выступать за первый вариант, так как это было бы более гибким, в случае изменения бизнес-процесса, и требуют (скажем) 9 ответов

Если вы беспокоитесь о хранении, я бы ожидал, что в среднем это займет меньше места для хранения «до» 7 копий меньшей формы, чем одна копия более крупной формы.

+2

+1 Некоторые люди скажут, что второй вариант даже не в первой нормальной форме (без повторяющихся групп). Хотя это не совсем верно, любая таблица с столбцами xxx1, xxx2, ... xxxn обычно является признаком плохого проектирования базы данных. –

+0

Я сделал это в спешке. Строго говоря, имена разные, например, менеджер, начальник службы, финансы, начальник отдела кадров и т. Д. Это все часть иерархии, поэтому форма должна быть одобрена одна за другой, «большой босс всех». –

+0

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

2

Первое решение кажется лучше. THEN вы можете проверить, не рассеяно ли оно кем-то, выполнив простой SQL: ... WHERE response.isapproved = False. В противном случае вы должны проверить все 7 полей в главной таблице.

+1

+1 Также представьте себе запрос для «Показать все формы, которые были одобрены Джо в этом месяце»! –

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

  • Нет связанных вопросов^_^