2016-08-17 5 views
0

Я испытываю трудности с дизайном базы данных MySQL.Сложность в конструкции базы данных

У меня есть следующие таблицы:

school_table 
id | school_name 
--------------------------- 
1 | success primary school 

stage_table 
id | stage_name 
--------------------------- 
1 | nursery 
2 | primary 
3 | secondary 

school_stage_table 
id | school_id | stage_id 
--------------------------- 
1 | 1  |  1 
2 | 1  |  2 

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

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

Как смоделировать этот сценарий в базе данных? Нужна ваша помощь.

+0

какие атрибуты вам нужно для сцены? Я думаю, вам нужно предоставить дополнительную информацию об этом. – Mike

+0

У вас может быть таблица school_stage_attributes с (например) school_stage_id (FK to school_satge_table.id) и атрибутами, связанными с этим этапом для этой школы. – Strawberry

+0

«разные атрибуты» слишком расплывчаты. Можете быть более конкретными? У вас могут быть общие attrs на 'school_table' и создавать 3 определенные таблицы с наборами attrs для каждой строки' stage_table'. – Serg

ответ

1

Один из вариантов здесь было бы создать stage_attribute таблицу, содержащую по меньшей мере следующие четыре колонки:

stage_attribute 
id | school_id | stage_id | attribute 

Каждая запись в этой таблице будет соответствовать одному атрибуту для одной стадии, например,

1 | 1 | 1 | 'nap time' 
2 | 1 | 1 | 'breakfast' 
3 | 1 | 3 | 'phys ed' 

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

+0

Это не кажется мне совершенно правильным. Или, возможно, это только часть ответа. – Strawberry

+0

Да ... Я вижу это: 'и, следовательно, разные значения атрибутов для разных школ ... плохой дизайн?Кстати, Гордон Линофф - лучший. На самом деле, он может быть компьютерной программой на этом этапе, загрузив свои знания SQL в суперкомпьютер. –

+1

Я тоже комментирую его/ее сообщения ;-) – Strawberry

0

Вы должны использовать таблицу school_stage_table для разных значений атрибутов для разных школ.

Если Вы будете использовать Схему же атрибуты для нескольких школ, то там должно быть больше одной таблицы с именем, например, school_stage_options с полями

school_stage_options_id | stage_id | option1 | option2 .... 

и позже использовать school_stage_options_id в school_stage_table вместо использования stage_id.

2

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

Здесь вы можете взять одну таблицу, которая сохранит все атрибуты каждого этапа. Вы можете использовать следующую таблицу для хранения атрибутов.

Таблица:

school_stage_attributes_table 

id | school_stage_id | attributes_name | attributes_value 
------------------------------------------------------------ 
1 | 1   |  attrib_1  | value_1 
2 | 1   |  attrib_2  | value_2 
Смежные вопросы