我在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 :(得分: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
。