因此,昨天我问了两个围绕着同样想法的问题:重组一个数据库,使A-没有正常化,B-由于我的无知而变得混乱。我花了一整天的时间来组织我的想法,阅读并通过一些测试。今天,我认为我对DB的外观和行为有了更好的理解,但我想确保理解正确的SQL DB设计和规范化过程的核心思想。这个数据库结构是否理智,正确和规范化?
本来我有一个名为“文件”的表格,它包含关于文件的数据(它是URL,上传日期,谁上传它的用户ID等)以及一个名为“成绩”可能会使用该文件。 (仅供参考:这些文件是学校的教案)我意识到我违反了关于规范化的规则#1 - 我存储了像“1,2”或“2,6”或“3,5,6”这样的“等级” “在一列中。如果我想看到JUST 3年级的课程或JUST 5年级的课程,这在试图解析数据时造成了很大的麻烦。
什么建议给我,后来又变成了什么明显的,是我有3个表:
文件(数据有关的文件,网址等) 等级(可用级水平的表可能的1 -6开始) files_grades(结表)
这是有道理的。我只是想确保我明白我在做什么之前要做的事情。比方说,用户A上传文件xyz,并决定它对2和3年级是好的。
我会写一个记录到“文件”表与关于该文件的数据(大小,网址,描述,名称,主key files_id)。比方说,它得到ID 345
由于等级选项数量有限,成绩可能会被等同于他们的ID(即1级为grades_id 1,2级是grades_id 2)
我会然后写两个记录包含
files_grade_id,files_id的 “files_grade” 结表,grades_id即
1,345,2
1,345,3
表示files_id 345适合的2个等级。然后,我挥舞我的魔术SELECT和JOIN魔杖并拉出我需要的数据。
这是否有意义?我是否还误解了关系型多对多数据库的正确结构?
问题2刚刚在我身上恍然大悟:所以,一节课可以有多个“成绩”。没问题,我们只是解决了这个问题(我希望!)。但理论上它可以有多个“学校” - 小学,中学,高等。如果一个文件条目的Middle,High等级为1,2,我们该怎么办?通过说“每个文件一个学校,用户!”可以很容易地解决这个问题,但我喜欢把它扔到那里。
啊。这就说得通了!谢谢。 – GilloD 2010-02-19 02:40:58