0

想象一下,我们有一个 phpadmin 数据库,我们有一个学生表,student_music 和 student_friend student_friend_music。有四个表在性能上有意义吗?还是您认为我们需要为学生 student_friends student_music 和音乐表提供三个表。facebook如何在它的数据库中存储朋友关系?

另一件事是我为两者设计了数据库。我不知道我是否看到任何区别,但我认为一旦用户增加,一个会击败其他性能明智?

所以我的问题涉及查询的性能:拥有更多表更好还是我们可以重复。

你知道我可以学习的任何好书、教程或参考资料,以了解 Php my admin 和 mysql 中的关系数据库。

更新:Table Student 可以与自身有多对多的关系。餐桌音乐也与学生有多对多。

Student id Student_friend  Music id     STUDENT_MUSIC     
  A      1      1-3         YT    1          1  3
  B      2      2-3         RU    2          2  3
  C      3                  PI    3          3  1
                                             3  2

所以我在代码点火器中使用了一个叫做 Data Mapper 的东西,这让我很头疼,但这听起来像是我现在正在考虑的结构。

4

2 回答 2

3

表建议:

table_students(包括学生信息等)

于 2012-04-24T02:05:12.663 回答
1

查看此链接以获取 mysql 介绍和有关关系数据库的wikipedia文章。阅读有关表、主键和外键的信息。在担心性能之前,您需要解决数据库的结构。

尝试(一对多:一个学生可以拥有多首音乐并有一个朋友):

CREATE TABLE Student(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id),
    first_name VARCHAR(30),
    last_name VARCHAR(30),
    friend_id INT)

CREATE TABLE Music(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id),
    music_title VARCHAR(30),
    music_student_id INT)
    FOREIGN KEY (music_student_id) REFERENCES Student(id)
                  ON DELETE CASCADE

或者尝试(多对多:很多学生可以拥有很多音乐并有很多朋友):

CREATE TABLE Student(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id),
    first_name VARCHAR(30),
    last_name VARCHAR(30))
    FOREIGN KEY (id) 
    REFERENCES StudentMusic (Student_id)
    ON DELETE CASCADE

CREATE TABLE Music(
    id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY(id),
    music_title VARCHAR(30),
    FOREIGN KEY (id) 
    REFERENCES StudentMusic (Music_id)
    ON DELETE CASCADE

CREATE TABLE StudentMusic (
    Student_id INT NOT NULL AUTO_INCREMENT, 
    Music_id INT NOT NULL AUTO_INCREMENT, 
    PRIMARY KEY  (Student_id,Music_id)

CREATE TABLE Friendships(
    student_A_id INT,
    student_B_id INT)
    PRIMARY KEY  (student_A_id,student_B_id)

可以使用 Select 语句显示处理关系的数据视图。在一对多设计中,查找学生的音乐使用以下查询:

Select Student.first_name,Student.last_name,Music.music_title 
FROM Student 
LEFT JOIN Music on (Student.ID=Music.music_student_id)

设计数据库的一部分是弄清楚您需要查询哪些关系。

还研究规范化数据库

于 2012-04-24T02:13:47.140 回答