数据库设计困难

时间:2016-08-17 09:30:55

标签: mysql sql database relational-database

我在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是一个链接表。这是因为学校与阶段之间存在多对多的关系,即单一学校可能有很多阶段,同一阶段可能有很多学校。

问题来自: 每个阶段都有不同的属性,因此不同学校的属性值不同。

如何在数据库中为此场景建模?需要你的帮助。

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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添加属性列。当然,这是有问题的,因为每个阶段可能具有不同数量或类型的属性,并且它不会针对许多属性进行缩放。我上面给出的选项通过使用任意数量的记录来存储阶段属性信息,从而消除了许多这些问题。

答案 2 :(得分:0)

您应该将表school_stage_table用于不同学校的不同属性值。

如果您将为多所学校使用相同的属性架构,那么应该再增加一个表,例如带有字段的school_stage_options

school_stage_options_id | stage_id | option1 | option2 ....

以后在school_stage_options_id中使用school_stage_table而不是stage_id