Mysql
 sql >> база данни >  >> RDS >> Mysql

Как да съхранявате данни с динамичен брой атрибути в база данни

Ако някога Планирайте търсенето на конкретни атрибути, лоша идея е да ги сериализирате в една колона, тъй като ще трябва да използвате функции за всеки ред, за да извлечете информацията – това рядко се мащабира добре.

Бих избрал вашия втори избор. Имайте списък с атрибути в таблица с атрибути, обектите в тяхната собствена таблица и таблица на отношенията много към много, наречена атрибути на обекти.

Например:

objects:
    object_id    integer
    object_name  varchar(20)
    primary key  (object_id)
attributes:
    attr_id      integer
    attr_name    varchar(20)
    primary key  (attr_id)
object_attributes:
    object_id    integer  references (objects.object_id)
    attr_id      integer  references (attributes.attr_id)
    oa_value     varchar(20)
    primary key (object_id,attr_id)

Вашата загриженост относно производителността е отбелязана, но според моя опит винаги е по-скъпо да разделяте колона, отколкото да комбинирате няколко колони. Ако се окаже, че има проблеми с производителността, е напълно приемливо да се счупи 3NF поради съображения за производителност.

В този случай бих го съхранил по същия начин, но също така ще имам колона с необработените сериализирани данни. При условие, че използвате тригери за вмъкване/актуализация, за да поддържате колонните и комбинираните данни в синхрон, няма да имате проблеми. Но не бива да се тревожите за това, докато не се появи действителен проблем.

Използвайки тези тригери, вие свеждате до минимум работата, която се изисква до само когато данните се променят. Опитвайки се да извлечете информация от подколона, вие вършите ненужна работа на всяка изберете.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да генерирате фрагмента като тези, генерирани от Google с PHP и MySQL?

  2. doctrine2 и group_concat

  3. SQL:Как се изпълнява низ не е равен

  4. Как да проверя дали MySQL таблицата е UTF-8 и има storageEngine InnoDB?

  5. Как да копирам таблица в MySQL