Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Model bazy danych EAV, lista rekordów zgodnie z wyszukiwaniem

Projekt EAV jest zdenormalizowane. Oznacza to, że jest to projekt nierelacyjny. Nie ma reguły normalizacji, która prowadziłaby do korzystania z projektu EAV.

SQL wymaga znajomości kolumn podczas pisania zapytania, a także tego, aby każdy wiersz zestawu wyników zawierał te same kolumny. W przypadku EAV jedynym rozwiązaniem, jeśli nie wiesz, ile pól przypada na element, jest pobranie ich z powrotem jako wierszy, a nie kolumn.

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;

Musisz przetworzyć wiersze w swojej aplikacji. Na przykład w 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"];
}

Teraz masz tablicę obiektów, a każdy obiekt odpowiada elementowi z bazy danych. Każdy obiekt ma swój własny zestaw pól.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Kilka porad na temat Cassandry kontra MySQL

  2. Jak ograniczyć lub nadać priorytet zapytaniu w MySql

  3. zapytanie mysql, aby wybrać jeden konkretny wiersz i inny losowy wiersz

  4. Jak obliczyć przestrzeń dyskową używaną przez tabelę MySQL na podstawie typów danych kolumn i liczby wierszy?

  5. MySQL 5.5 traci końcowe spacje w zapytaniu