【问题标题】:Database structures Phpadmin in MySQL CodeIgniterMySQL CodeIgniter 中的数据库结构 Phpmyadmin
【发布时间】:2012-05-04 16:00:53
【问题描述】:

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

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

所以我的问题涉及查询的性能: 有更多的桌子更好还是 我们可以复制吗?

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

更新: 表学生可以和自己有多对多的关系。 餐桌音乐也与学生有多对多。

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 的东西,这让我很头疼,但这听起来像是我现在正在考虑的结构。

【问题讨论】:

    标签: mysql database codeigniter phpmyadmin


    【解决方案1】:

    表建议:

    table_students(包含学生信息等) table_music(来自 table_students 的学生 id 的 studs 音乐首选项) table_friends(包含学生表中的学生 ID 和标记值是朋友还是非朋友)

    【讨论】:

    • 是的,这是真的……但我的问题是:设计数据库并在各种表中具有重复条目是否有意义。或者我们应该添加更多关系以避免重复条目。我将用一个例子编辑我上面的帖子。
    • 我建议添加更多关系。
    • 我不确定你是否使用过数据映射器,但现在它有点限制我。它使整个 MySql 面向对象。所以现在我无法弄清楚如何与它自己建立多对多的自我关系。我希望我可以只编写 MySql 而不会将自己限制在像 Code igniter 这样的框架中。
    【解决方案2】:

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

    试试(One-to-Many:一个学生可以拥有多首音乐,并且有一个朋友):

    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
    

    或者试试(Many-to-Many:很多学生可以拥有很多音乐和很多朋友):

    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)
    

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

    同时查看normalizing databases

    【讨论】:

    • 你说得对,我不应该担心性能,但我对编写代码有点认真。我应该选择最好的解决方案。
    • 认真一点没关系,但你通常会选择可扩展的设计,直到你需要更高的性能。
    猜你喜欢
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 2014-11-13
    • 2020-07-05
    • 2016-01-15
    • 1970-01-01
    • 2015-04-25
    • 1970-01-01
    相关资源
    最近更新 更多