Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Bagaimana cara menyimpan array ke mysql?

Anda mungkin ingin mengatasinya sebagai berikut:

CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
);

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
);

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id)
);

Gabungan kunci utama (comment_id, user_id) di tabel persimpangan comments_votes akan mencegah pengguna memilih beberapa kali pada komentar yang sama.

Mari kita masukkan beberapa data dalam skema di atas:

INSERT INTO comments VALUES (1, 'first comment');
INSERT INTO comments VALUES (2, 'second comment');
INSERT INTO comments VALUES (3, 'third comment');

INSERT INTO users VALUES (1, 'user_a');
INSERT INTO users VALUES (2, 'user_b');
INSERT INTO users VALUES (3, 'user_c');

Sekarang mari tambahkan beberapa suara untuk pengguna 1:

INSERT INTO comments_votes VALUES (1, 1, 1);
INSERT INTO comments_votes VALUES (2, 1, 1);

Di atas berarti pengguna 1 memberikan suara tipe 1 pada komentar 1 dan 2.

Jika pengguna yang sama mencoba untuk memilih lagi pada salah satu komentar tersebut, database akan menolaknya:

INSERT INTO comments_votes VALUES (1, 1, 1);
ERROR 1062 (23000): Duplicate entry '1-1' for key 'PRIMARY'

Jika Anda akan menggunakan InnoDB mesin penyimpanan, sebaiknya gunakan kunci asing batasan pada comment_id dan user_id bidang tabel persimpangan. Namun perhatikan bahwa MyISAM , mesin penyimpanan default di MySQL, tidak menerapkan batasan kunci asing:

CREATE TABLE comments (
    comment_id int, 
    body varchar(100), 
    PRIMARY KEY (comment_id)
) ENGINE=INNODB;

CREATE TABLE users (
    user_id int, 
    username varchar(20), 
    PRIMARY KEY (user_id)
) ENGINE=INNODB;

CREATE TABLE comments_votes (
    comment_id int, 
    user_id int, 
    vote_type int, 
    PRIMARY KEY (comment_id, user_id),
    FOREIGN KEY (comment_id) REFERENCES comments (comment_id),
    FOREIGN KEY (user_id) REFERENCES users (user_id)
) ENGINE=INNODB;

Kunci asing ini menjamin bahwa baris di comments_votes tidak akan pernah memiliki comment_id atau user_id nilai yang tidak ada di comments dan users tabel, masing-masing. Kunci asing tidak diperlukan untuk memiliki database relasional yang berfungsi, tetapi sangat penting untuk menghindari hubungan yang rusak dan baris yatim piatu (mis. integritas referensial ).

Faktanya, integritas referensial adalah sesuatu yang akan sangat sulit diterapkan jika Anda menyimpan array serial ke dalam satu bidang database.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cara termudah untuk Menambahkan Beberapa Spasi ke String di MySQL – SPACE()

  2. Dua kunci utama ditentukan dalam database MySQL

  3. Tanggal MySQL atau waktu PHP?

  4. hapus semua dari tabel

  5. Bagaimana cara membuat CakePHP bake untuk menemukan mysql.sock dan mengenali MySQL saat menggunakan MAMP di Mac OSX?