Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Mô hình cơ sở dữ liệu EAV, danh sách hồ sơ theo tìm kiếm

Thiết kế EAV is không chuẩn hóa. Đó là, đó là một thiết kế không quan hệ. Không có quy tắc chuẩn hóa nào dẫn bạn đến việc sử dụng thiết kế EAV.

SQL yêu cầu bạn biết các cột khi bạn viết truy vấn và mọi hàng của tập kết quả đều có các cột giống nhau. Với EAV, giải pháp duy nhất nếu bạn không biết có bao nhiêu trường cho mỗi mục là tìm nạp chúng trở lại dưới dạng hàng, không phải cột.

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;

Bạn phải xử lý các hàng trong ứng dụng của mình. Ví dụ, với 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"];
}

Bây giờ bạn có một mảng các đối tượng và mỗi đối tượng tương ứng với một mục từ cơ sở dữ liệu. Mỗi đối tượng có nhóm trường tương ứng của riêng nó.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ràng buộc để ngăn vi phạm ràng buộc FK trong bảng thứ ba

  2. Cách hoạt động của toán tử SOUNDS LIKE trong MySQL

  3. Trường SQL để trả về có các ký tự không phải số bị loại bỏ trong MySQL

  4. MySQL:Bật TẢI THÔNG TIN ĐỊA PHƯƠNG DỮ LIỆU

  5. pandas 'read_sql với danh sách các giá trị cho điều kiện WHERE