2009-09-11 3 views
2

В настоящее время я работаю над проектом, в котором у меня есть «единицы», которые будут иметь три разных «фазы» и три «шага» для каждой «фазы». У меня возникли проблемы с разработкой макета моей базы данных, в результате чего я не знаю, стоит ли размещать все это в одной таблице или нескольких таблицах.Вопрос по дизайну

, например:

таблице 1: unit_id, unit_category, unit_name, unit_phase, unit_step

или:

таблица 1: unit_id, unit_category, unit_name

таблица 2: phase_id, имя_файла, unit_id

таблица 3: step_id, step_name, unit_id

...

Легче постоянно обновлять поля в строке, или лучше разместить идентификаторы «единиц» в других таблицах?

(также, каждая фаза имеет те же самые шаги)

уточнить: каждый блок идет через 5 различных фаз. в каждой фазе 3 шага. после того, как блок прошел все фазы, он возвращается в состояние покоя. пользователь запускает этот процесс.

+0

Это не имеет никакого отношения к php ... возможно, кто-то с более Rep может отредактировать его? – theycallmemorty

ответ

2

Вы должны грабить в нормальных правилах базы данных. Это поможет вам разработать ваши таблицы.

Посмотрите:

Правила:

  • Ликвидировать дублирующие столбцы из той же таблицы.
  • Создайте отдельные таблицы для каждой группы связанных данных и определите каждую строку с уникальным столбцом или набором столбцов (первичный ключ).
  • Удалите подмножества данных, которые применяются к нескольким строкам таблицы и поместите их в отдельные таблицы.
  • Создайте отношения между этими новыми таблицами и их предшественниками с помощью внешних ключей.
  • Удалить столбцы, которые не зависят от первичного ключа.
1

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

+0

Похоже, что на единицу будет несколько шагов, потому что 1) есть несколько шагов на фазу и 2) несколько фаз на единицу. –

+0

Да, но вопрос в том, может ли один блок иметь несколько шагов или фаз * в то же время *? Дополнительные таблицы нужны только для отображений n: m. –

+0

«фаза» и «шаг» подразумевают, что одна единица проходит через разные фазы и их шаги последовательно. –

0

http://en.wikipedia.org/wiki/Database_normalization

Это тема, которую вы должны погрузиться в глубокую. Но для вашей конкретной проблемы: постарайтесь не дублировать записи. Попытайтесь сконструировать базу данных таким образом, чтобы связать каждую таблицу с другими с помощью наименьшего числа общих свойств (ключей).

0

'единицы', которые будут иметь три различные 'фазы' и три 'шага' каждой 'фазы'

Взаимосвязи, как я их вижу:

  • единиц к фазам: 1-ко-многим
  • единиц до этапов: 1-ко-многим
  • Этапы шагов: 1-ко-многим

У меня было бы 3 отдельных стола: единицы измерения, этапы и этапы.

  1. единицы: идентификатор категории, имя
  2. фазы: идентификатор, имя, unit_id
  3. шаги: ID, имя, phase_id

Затем, если вы хотите, чтобы получить все шаги, связанные с единицей, SQL будет выглядеть следующим образом:

SELECT steps.* 
FROM units 
LEFT OUTER JOIN phases ON units.id=phases.unit_id 
LEFT OUTER JOIN steps ON phases.id=steps.phase_id 
WHERE units.id='the particular unit ID for which you want to query' 
Смежные вопросы