0

phpadmin データベースがあり、students、student_music、student_friend、student_friend_music のテーブルがあるとします。4 つのテーブルを持つことは、パフォーマンスの点で理にかなっていますか? それとも、学生用の 3 つのテーブルが必要だと思いますか。Facebookは友達関係をデータベースにどのように保存しますか?

もう1つは、両方のデータベースを設計したことです。違いが見られるかどうかはわかりませんが、ユーザーが増えると、パフォーマンスに関して他の人に勝ると思いますか?

したがって、私の質問はクエリのパフォーマンスに関するものです。これはテーブルを増やす方が良いですか、それとも重複することはできますか?

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

だから私はコードイグナイターでデータマッパーと呼ばれるものを使用していますが、これは頭痛の種ですが、これは私が今考えている構造のように聞こえます。

4

2 に答える 2

3

テーブルの提案:

table_students (生徒の情報などを含む) table_music (table_students の生徒 ID を持つスタッドの音楽設定) table_friends (表の生徒の生徒 ID と、友人かどうかのフラグ値を含む)

于 2012-04-24T02:05:12.663 に答える
1

mysql の紹介とリレーショナル データベースに関するウィキペディアの記事については、このリンクを参照してください。テーブル、主キー、外部キーについて読んでください。パフォーマンスについて心配する前に、データベースの構造に対処する必要があります。

試してみてください ( 1 対多: 学生は多くの曲を所有し、1 人の友達を持つことができます):

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 に答える