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

Model database EAV, daftar rekaman sesuai pencarian

Desain EAV adalah didenormalisasi. Artinya, ini adalah desain non-relasional. Tidak ada aturan normalisasi yang akan mengarahkan Anda untuk menggunakan desain EAV.

SQL mengharuskan Anda mengetahui kolom saat menulis kueri, dan juga setiap baris kumpulan hasil memiliki kolom yang sama. Dengan EAV, satu-satunya solusi jika Anda tidak tahu berapa banyak bidang per item adalah mengambilnya kembali sebagai baris, bukan kolom.

SELECT i.ItemID, i.ItemName, f.FieldName, v.Value
FROM Items i
JOIN FieldsValues v4 ON (v4.ItemID, v4.FieldID, v4.Value) = (i.ItemID, 4, TRUE)
JOIN FieldsValues v ON i.ItemID = v.ItemID
JOIN Fields f ON v.FieldID = f.FieldID;

Anda harus memproses baris dalam aplikasi Anda. Misalnya, dengan PHP:

<?php

$pdo = new PDO(...);
$sql = "...above query...";

$collection = array();

foreach ($pdo->query($sql) as $row) {
  $id = $row["ItemID"];
  if (!array_key_exists($id, $collection)) {
    $collection[$id] = new stdClass();
    $collection[$id]->Name = $row["ItemName"];
  }
  $collection[$id]->$row["FieldName"] = $row["Value"];
}

Sekarang Anda memiliki array objek, dan setiap objek sesuai dengan item dari database. Setiap objek memiliki kumpulan bidangnya masing-masing.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Praktik terbaik pengoptimalan database MySQL

  2. MySQL IFNULL () Dijelaskan

  3. Grup Keamanan DB hanya dapat dikaitkan dengan Instans DB VPC menggunakan versi API

  4. Rails 5 Mysql UUID

  5. Bagaimana cara mendapatkan jenis pernyataan kueri di PDO?