大话wordpress之数据库设计基础

假设系统中有2种实体,如“学生”,“课程”,一个学生可学多门课程,一个课程可被多个学生所学,二者是多对多的关系,如何设计数据库?

#学生
CREATE TABLE IF NOT EXISTS student (
    id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(16) NOT NULL DEFAULT '' COMMENT '姓名'
);

#课程
CREATE TABLE IF NOT EXISTS course (
    id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    title VARCHAR(64) NOT NULL DEFAULT '' COMMENT '课程名'
);

#学生与课程的关系表
CREATE TABLE IF NOT EXISTS student_course (
    id int(10) NOT NULL PRIMARY KEY AUTO_INCREMENT,
    student_id int(10) NOT NULL DEFAULT 0,
    course_id int(10) NOT NULL DEFAULT 0
);
实体关系图:
Course ---- 关系表 ---- Teacher

这都是套路,没什么好说的,下面才是重点。

假设有3种实体,“学生”,“课程”,“教师”,互相都是多对多,如何设计?

2种方法:

实体关系图:

                      Student
                      /     \
                     /       \
                    /         \
                  关系表     关系表
                  /             \
                 /               \
                /                 \
             Course ---- 关系表 ---- Teacher
实体关系图:
           Student  
              |
              |
              |
             关系表 ------ 关系表 -------- Teacher    
              |
              |
              |
            Course

前者6张表,后者5张表,各有优劣。

 

WordPress 中 taxonomy(类目)、term(词条)、post(文章)这三者之间也有类似的关系,Wordpress 选择了后者的表达方式。

实体关系图:
      wp_terms  
        |
        |
        |
wp_term_taxnomy --- wp_term_relationships -- wp_posts    
     (关系表)
        |
        |
        |
      wp_taxonomy(此表在内存中)

不过wordpress的数据库中并没有 wp_taxonomy这张表,它是以数组的形式存在于内存中,在理解表的关系时,可以认为它存在,如下图:

wp_database_taxonomy_uml

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注