Bisakah kita menyimpan daftar di mysql?

Misalnya, jika saya ingin menyimpan daftar teman pengguna, maka cara yang dapat saya pikirkan adalah seperti ini

pengguna. teman
Yohanes. Jim
Yohanes. Bob
Yohanes. Amy
Bob. Jim
Bob. Amy

Jadi daftar teman John termasuk Jim, Bob, dan Amy, dan daftar teman Bob termasuk Jim dan Amy. Tetapi tampaknya sangat tidak efisien untuk membuat baris baru setiap kali diperlukan entri baru dalam daftar

Saya ingin dapat menyimpan nilai-nilai seperti ini

pengguna. Daftar teman
Yohanes. Jim, Bob, Amy
Bob. Jim, Amy

Apa cara paling efisien untuk melakukan ini?

Sep 13 '08 #

9 33519

Bisakah kita menyimpan daftar di mysql?

Hai

Metode kedua yang Anda sebutkan tidak boleh digunakan. Tidak boleh ada bidang yang berisi lebih dari satu bagian data

Metode sederhana untuk melakukan hal seperti itu adalah dengan membuat dua tabel. Satu untuk info pengguna dan yang kedua untuk hubungan antara setiap pengguna

Ini mungkin terlihat seperti

  1. Pengguna
  2. ----------------
  3. UserID Nama Pengguna
  4. 1        Yohanes
  5. 2        Jim
  6. 3        Ami
  7. ----------------
  8. UserRelation
  9. ----------------
  10. UserID FriendID
  11. 1        2
  12. 1        3
  13. 2        1
  14. 3        2
  15. ----------------

Di mana kedua bidang talble UserRelation mereferensikan bidang UserID di tabel Pengguna. Anda bahkan dapat menggabungkannya sebagai Kunci Utama untuk menghindari entri duplikat

Sep 13 '08 #

Hai

Metode kedua yang Anda sebutkan tidak boleh digunakan. Tidak boleh ada bidang yang berisi lebih dari satu bagian data

Metode sederhana untuk melakukan hal seperti itu adalah dengan membuat dua tabel. Satu untuk info pengguna dan yang kedua untuk hubungan antara setiap pengguna

Ini mungkin terlihat seperti

  1. Pengguna
  2. ----------------
  3. UserID Nama Pengguna
  4. 1        Yohanes
  5. 2        Jim
  6. 3        Ami
  7. ----------------
  8. UserRelation
  9. ----------------
  10. UserID FriendID
  11. 1        2
  12. 1        3
  13. 2        1
  14. 3        2
  15. ----------------

Di mana kedua bidang talble UserRelation mereferensikan bidang UserID di tabel Pengguna. Anda bahkan dapat menggabungkannya sebagai Kunci Utama untuk menghindari entri duplikat
Ini adalah pengaturan yang saya miliki saat ini, tetapi saya pikir itu tidak efisien. Jadi hanya untuk klarifikasi, ini adalah cara terbaik untuk menyimpan kumpulan data tipe daftar?

Satu hal lagi. Di tabel kedua itu, apa kunci primer uniknya?

Sep 14 '08 #

Bisakah kita menyimpan daftar di mysql?

Ya. Ini cukup banyak dasar dari N. hubungan M

Ini juga jauh lebih efisien daripada yang Anda sarankan di posting pertama Anda

Pertama, contoh pertama Anda menyimpan semuanya sebagai bidang teks. Jauh lebih cepat untuk mencari melalui bilangan bulat daripada teks, bahkan jika bidang teks diindeks. Belum lagi jumlah ruang disk yang dibutuhkan semua teks, dibandingkan dengan bilangan bulat

Contoh kedua Anda, saat menggunakan struktur tabel yang tidak terlalu rumit, menyimpan beberapa bagian data di setiap bidang sebagai string, yang harus diproses dan dipecah menjadi setiap bagian individu setiap kali salah satu darinya perlu digunakan
Overhead yang jauh melebihi overhead apa pun yang akan ditimbulkan oleh GABUNG sederhana, terutama menggunakan struktur sederhana, seperti yang saya posting

Tabel kedua tidak memerlukan kunci primer bilangan bulat satu kolom tradisional yang kami gunakan di sebagian besar tabel
Anda dapat menggunakan dua kolom kunci asing sebagai kunci utama

  1. BUAT TABEL UserRelation (
  2. UserID_FK INT Unsigned Not Null References User(UserID),
  3. FriendID_FK Int Unsigned Not Null References User(UserID),
  4. Kunci Primer (UserID_FK, FriendID_FK)
  5. );

Ini juga akan melindungi tabel dari entri duplikat, seperti menautkan satu pengguna dua kali ke teman yang sama

Sep 14 '08 #

Ya. Ini cukup banyak dasar dari N. hubungan M

Ini juga jauh lebih efisien daripada yang Anda sarankan di posting pertama Anda

Pertama, contoh pertama Anda menyimpan semuanya sebagai bidang teks. Jauh lebih cepat untuk mencari melalui bilangan bulat daripada teks, bahkan jika bidang teks diindeks. Belum lagi jumlah ruang disk yang dibutuhkan semua teks, dibandingkan dengan bilangan bulat

Contoh kedua Anda, saat menggunakan struktur tabel yang tidak terlalu rumit, menyimpan beberapa bagian data di setiap bidang sebagai string, yang harus diproses dan dipecah menjadi setiap bagian individu setiap kali salah satu darinya perlu digunakan
Overhead yang jauh melebihi overhead apa pun yang akan ditimbulkan oleh GABUNG sederhana, terutama menggunakan struktur sederhana, seperti yang saya posting

Tabel kedua tidak memerlukan kunci primer bilangan bulat satu kolom tradisional yang kami gunakan di sebagian besar tabel
Anda dapat menggunakan dua kolom kunci asing sebagai kunci utama

  1. BUAT TABEL UserRelation (
  2. UserID_FK INT Unsigned Not Null References User(UserID),
  3. FriendID_FK Int Unsigned Not Null References User(UserID),
  4. Kunci Primer (UserID_FK, FriendID_FK)
  5. );

Ini juga akan melindungi tabel dari entri duplikat, seperti menautkan satu pengguna dua kali ke teman yang sama
Saya tidak terbiasa dengan sintaks untuk membuat tabel yang mereferensikan kunci asing. Bisakah Anda menjelaskan penggunaan dua nama kolom dengan Primary Key()?

Terima kasih untuk bantuannya

Sep 14 '08 #

Bisakah kita menyimpan daftar di mysql?

Tentu

Sederhananya, jika Anda menentukan beberapa kolom dalam klausa Kunci Utama, MySQL akan membuat kunci bersama, termasuk semuanya

Nilai sebenarnya dari Kunci Utama akan menjadi seperti itu
Dimana nilai col1-colN akan diganti dengan nilai tiap kolom pada baris yang diberikan

Karena itu, Anda tidak dapat membuat baris yang berisi kombinasi nilai yang tepat untuk kolom PK seperti baris sebelumnya. Nilai Kunci Utama harus unik, bahkan setiap kolom yang membentuk Kunci Utama dapat memiliki entri duplikat

Yang menjadikan ini ideal untuk situasi persis yang sedang kita diskusikan

Sep 14 '08 #

Jadi jika tabel User dan UserRelation diimplementasikan dalam aplikasi sebenarnya, untuk menampilkan daftar teman John, Anda harus melakukan hal berikut

  1. PILIH UserID FROM `User` WHERE UserName = 'John'

Dan kita akan mendapatkan 1. Maka kami akan melakukannya

  1. PILIH FriendID DARI `UserRelation` DI MANA UserID = 1

Dan kita akan mendapatkan 2 dan 3. Maka kami akan melakukannya

  1. PILIH UserName FROM `UserRelation` WHERE UserID = 2
  2. PILIH UserName FROM `UserRelation` WHERE UserID = 3

Dan akhirnya kami mendapatkan daftar teman John, Jim dan Amy. Apakah semua ini benar-benar lebih cepat daripada hanya memiliki

  1. Teman
  2. ----------------
  3. Nama Pengguna NamaTeman
  4. Yohanes     Jim
  5. John     Amy
  6. Jim      John
  7. Amy      John
  8. ----------------

Di mana kita bisa menjalankan SELECT FriendName FROM `Friend` WHERE UserName = 'John'?

11 Okt '08 #

Bisakah kita menyimpan daftar di mysql?

Ya. Mencocokkan teks biasanya jauh lebih lambat daripada mencocokkan angka, meskipun pendekatan Anda sangat sederhana
Belum lagi cara yang Anda sarankan akan menghabiskan lebih banyak ruang disk daripada cara yang tepat

Anda perlu menggunakan alat yang tersedia di database relasional
Kueri SELECT tidak hanya terbatas pada sintaks SELECT FROM WHERE. Anda dapat mengambil data dari lebih dari satu tabel, dan memfilter data ini berdasarkan lebih dari pemeriksaan boolean x = y sederhana

Ini adalah bagaimana database seperti itu harus digunakan

  1. PILIH `Pengguna`. `UserName` SEBAGAI 'Nama Teman'
  2. DARI `Pengguna`
  3. GABUNG INNER `UserRelation`
  4. AKTIF `Pengguna`. `UserID` = `UserRelation`. `FriendID_FK`
  5. DAN `UserRelation`. `UserID_FK` = (
  6. PILIH `UserID` DARI `User`
  7. WHERE `UserName` = 'John'
  8. )

Ini Menggabungkan dua tabel dan memfilter data untuk menampilkan teman pengguna yang dipilih oleh subquery
Perhatikan bahwa saya berasumsi bahwa UserName itu unik, itulah sebabnya saya menggunakannya di subquery tanpa klausa LIMIT

Itu melakukan persis seperti yang dilakukan semua kueri SELECT Anda, tetapi dengan cara yang benar
Ini adalah kekuatan sebenarnya dari database relasional, kemampuannya untuk menggabungkan tabel dan memfilter data berdasarkan lebih dari satu tabel tunggal pernyataan SELECT FROM WHERE

Jika Anda tidak mendapatkan sintaksnya, saya sarankan Anda membaca tentang sintaks Join dan Subquery
Jika semuanya baru bagi Anda, Anda mungkin ingin mencari beberapa tutorial tentang konsep tersebut

11 Okt '08 #

Ini semua baik dan bagus sampai teman tersebut memiliki lebih dari satu teman lol

17 Maret '11 #

Bisakah kita menyimpan daftar di mysql?


Bagaimana maksudmu?

Seluruh tujuan dari konsep yang kita bicarakan di sini adalah untuk menghubungkan satu baris ke beberapa baris lainnya. (Membaca. untuk memungkinkan satu orang berteman dengan banyak orang. )

Bisakah saya menyimpan array di MySQL?

MySQL tidak memiliki tipe data array . Ini adalah masalah mendasar dalam arsitektur di mana menyimpan baris yang didenormalisasi adalah persyaratan, misalnya, di mana MySQL (juga) digunakan untuk pergudangan data.

Bagaimana cara menyimpan daftar Python di MySQL?

Pertama, impor waktu dan pustaka mysql. Hasilkan daftar Anda dan masukkan ke dalam array. Setelah itu, gunakan untuk setiap pernyataan untuk mendorong setiap item yang terdaftar ke tabel mysql. Anda akan menjalankan fungsi sql INSERT INTO dan menentukan tujuan db dan autentikasi dalam skrip python

Apa itu daftar di MySQL?

Tampilan atau daftar tabel sangat penting ketika kita memiliki banyak database yang berisi berbagai tabel . Terkadang nama tabel sama di banyak database; .

Apa yang bisa saya simpan di MySQL?

MySQL dapat bertindak sebagai NoSQL JSON Document Store sehingga pemrogram dapat menyimpan data tanpa harus menormalkan data, menyiapkan skema, atau bahkan harus . Sejak MySQL versi 5. 7 dan MySQL 8. 0, pengembang dapat menyimpan dokumen JSON di kolom tabel.