首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL CodeIgniter中的数据库结构Phpadmin

MySQL CodeIgniter中的数据库结构Phpadmin
EN

Stack Overflow用户
提问于 2012-04-24 09:48:40
回答 2查看 410关注 0票数 0

假设我们有一个phpadmin数据库,我们有一个用于学生、student_music和student_friend student_friend_music的表。这对拥有四个表的性能有意义吗?或者你认为我们需要有三张学生用的桌子students_friends student_music和放音乐的桌子。facebook是如何在其数据库中存储好友关系的?

另一件事是,我为两者设计了数据库。我不知道我是否看到了什么不同,但我认为一旦用户增加,它就会击败其他性能。

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

你知道有什么好书、教程或参考资料可以让我学习来了解Php、我的管理员和mysql中的关系数据库吗?

更新:表学生可以与自身有多对多的关系。桌上音乐对学生来说也是多对多的。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-04-24 10:13:47

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

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

代码语言:javascript
复制
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:许多学生可以拥有许多音乐作品,也可以有很多朋友):

代码语言:javascript
复制
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语句显示处理关系的数据视图。在一对多设计中,查找学生的音乐使用以下查询:

代码语言:javascript
复制
Select Student.first_name,Student.last_name,Music.music_title 
FROM Student 
LEFT JOIN Music on (Student.ID=Music.music_student_id)

设计数据库的一部分就是找出你需要查询的关系。

还可以研究一下normalizing databases

票数 1
EN

Stack Overflow用户

发布于 2012-04-24 10:05:13

表建议:

table_students (包含学生信息等) table_music (来自table_students的带有学生id的学生的音乐首选项) table_friends (包含学生表中的学生id和无论是朋友还是非朋友的标志值)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10290754

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档