2016-08-17 5 views
0

Ich habe Schwierigkeiten bei der MySQL Datenbankgestaltung.Schwierigkeiten beim Datenbankdesign

Ich habe die folgenden Tabellen:

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 eine Verknüpfungstabelle. Dies liegt daran, dass es viele Beziehungen zwischen Schule und Bühne gibt, das heißt, eine einzelne Schule kann viele Stufen haben, und die gleiche Stufe kann viele Schulen haben.

Das Problem kommt hier: Jede Stufe hat verschiedene Attribute und daher unterschiedliche Attributwerte für verschiedene Schulen.

Wie modelliere ich dieses Szenario in einer Datenbank? Brauche deine Hilfe.

+0

welche Art von Attributen, die Sie für die Bühne müssen? Ich denke, du musst mehr Informationen darüber geben. – Mike

+0

Sie können eine Tabelle "school_stage_attributes" mit (z. B.) einer schul_Stage_ID (FK to school_satge_table.id) und den Attributen, die dieser Stufe für diese Schule zugeordnet sind, haben. – Strawberry

+0

"verschiedene Attribute" ist zu vage. Kannst du genauer sein? Sie können an "school_table" gewöhnliche Besucher haben und 3 spezifische Tabellen mit attrs-Sets für jede 'stage_table'-Reihe erstellen. – Serg

Antwort

1

Eine Möglichkeit wäre hier eine stage_attribute Tabelle zu erstellen, das mindestens die folgenden vier Spalten:

stage_attribute 
id | school_id | stage_id | attribute 

Jeder Datensatz in dieser Tabelle auf ein einzelnes Attribut für ein einstufiges entsprechen würde, z.B.

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

Ich vermute, dass einige der Schwierigkeiten im Kopf mit der Möglichkeit, für jedes Attribut des Hinzufügens von Attributspalten der stage_table waren. Dies ist natürlich problematisch, da jede Stufe eine unterschiedliche Anzahl oder Art von Attributen haben kann und für viele Attribute nicht skaliert werden kann. Die oben angegebene Option beseitigt viele dieser Probleme, indem eine beliebige Anzahl von Records verwendet wird, um die Stage-Attributinformationen zu speichern.

+0

Das scheint mir nicht richtig zu sein. Oder, ist vielleicht nur ein Teil der Antwort. – Strawberry

+0

Ja ... Ich sehe das: 'und daher unterschiedliche Attributwerte für verschiedene Schulen' ... schlechtes Design?Gordon Linoff ist übrigens der Beste. Eigentlich könnte er zu diesem Zeitpunkt ein Computerprogramm sein, nachdem er sein SQL-Wissen auf einen Supercomputer hochgeladen hat. –

+1

Ich kommentiere auch seine Beiträge ;-) – Strawberry

0

Sie sollten die Tabelle school_stage_table für diese verschiedenen Attributwerte für verschiedene Schulen verwenden.

Wenn Sie das gleiche Attribut Schema für mehrere Schulen verwenden, dann sollte es eine weitere Tabelle zum Beispiel school_stage_options mit Feldern

school_stage_options_id | stage_id | option1 | option2 .... 

und später verwendet school_stage_options_id in school_stage_table statt stage_id die Verwendung aufgerufen werden.

2

Wie Sie bereits gesagt haben, dass Sie einige Probleme haben, wie Sie verschiedene Attribute von jeder Stufe jeder Schule speichern.

Hier können Sie eine Tabelle nehmen, die alle Attribute jeder Stufe speichert. Sie können die folgende Tabelle zum Speichern von Attributen verwenden.

Tabelle:

school_stage_attributes_table 

id | school_stage_id | attributes_name | attributes_value 
------------------------------------------------------------ 
1 | 1   |  attrib_1  | value_1 
2 | 1   |  attrib_2  | value_2