2016-08-17 47 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

“不同的属性”太模糊。你可以说得更详细点吗?你可能在'school_table'上有共同的attrs,并为每个'stage_table'行创建3个具有attrs集合的特定表。 – 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

是的......我看到这一点:'因此不同的学校属性值不同......坏设计?顺便提一下,Gordon Linoff是最棒的。事实上,他可能是一个计算机程序,他已经将他的SQL知识上传到超级计算机。 –

+1

我也评论他/他的帖子;-) – Strawberry

0

对于不同学校的这个不同的属性值,你应该使用table school_stage_table。

如果你会使用多所学校同一个属性的模式,那么就应该有一个叫例如school_stage_options与领域

school_stage_options_id | stage_id | option1 | option2 .... 

,后来更表使用school_stage_options_idschool_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