想象一下,我们有一个phpadmin数据库,我们有一个学生表和student_music以及student_friend student_friend_music。这有四个表是否明智有效?或者你认为我们需要为学生们提供三张桌子student_friends student_music和music for table。 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的东西,这让我很头疼,但这听起来像是我现在想的结构。
答案 0 :(得分:3)
表建议:
table_students(包含学生信息等) table_music(来自table_students的学生ID的铆钉音乐首选) table_friends(包含来自表学生的学生ID和标志值,无论是朋友还是非朋友)
答案 1 :(得分:1)
查看此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语句显示处理关系的数据视图。在One-to-Many设计中,学生的音乐使用以下查询:
Select Student.first_name,Student.last_name,Music.music_title
FROM Student
LEFT JOIN Music on (Student.ID=Music.music_student_id)
设计数据库的一部分是确定您需要查询的关系。