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

Има ли някакво предимство/недостатък от съхраняването на стойността на полето като JSON масив, вместо да създавате нова маса и да ги залагате на връзка едно към много?

Според моя опит това зависи до голяма степен от данните, които се съхраняват. И двата начина имат предимства и недостатъци. Ако това е MMORPG уеб игра след това кажете, че имате компютър който има колан. И компютърът може да постави отвари в този колан за бърз достъп по време на битка. Така че искаме да запазим идентификаторите на отвари, които се съхраняват в колана на героя.

Най-често срещаната молба би била "вземете всички отвари, които има герой X". И това ще стане доста бързо и в двата случая.

Предимствата от съхраняването на тези идентификатори на отвари като отделна таблица:

  • Можете да търсите определен идентификатор на отвара и това е много бързо. Пример в играта:администраторите премахнаха някаква отвара от играта и затова трябва да актуализирате коланите на всички
  • Можете да получите хубави статистически данни. Пример по време на игра:потърсете най-използваната отвара сред всички играчи
  • Базата данни ще поддържа целостта на данните. Пример в играта:никога няма да срещнете ситуация, когато сте използвали отварата и играта казва „Ами сега, отвара с този идентификатор не съществува“
  • Добър е за последователност. Пример по време на игра:взехте отвара от колана и я сложихте в раницата. Играта може да го приложи чрез извикване на транзакция с две прости ясни SQL израза.
  • Можете да правите JOIN. Пример по време на игра:трябва да получим списък с отвари в колана заедно с техните имена, тегла и изображения, които се съхраняват в отделната таблица.
  • Можете да актуализирате един елемент, без да е необходимо да актуализирате целия колан. Принуден-пример в играта:имате милион отвари в колана си и сте изпили една.

Предимствата на съхранението като json:

  • Ако това е браузърна игра, която използва javascript от страна на клиента, тогава получавате обекта Belt json с една проста заявка, вместо да правите Select-заявка и след това да конвертирате в json.
  • Много по-лесно е да поддържате реда на елементите, тъй като json масивите вече са подредени. С подхода на таблицата ще ви е необходима допълнителна колона, наречена "поръчка", и да я актуализирате всеки път и да проверявате дали два елемента нямат еднакъв ред и т.н.
  • Можете да направите няколко пренареждания в колана от страна на клиента, след което щракнете върху „Прилагане“ — бум, с една заявка можете да актуализирате целия колан. Докато при подхода към таблицата ще ви трябват поне две заявки за това (DELETE + INSERT)
  • Освен това популярните СУБД имат приставки които поддържат json функции в базата данни

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



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Преносим начин за осигуряване на IP-базиран период на охлаждане?

  2. Система за нулиране на парола в PHP

  3. php функция не връща всички резултати от MySQL заявка в foreach

  4. LAST_INSERT_ID() винаги връща 0 (RMySQL) - отделен проблем с връзката

  5. Как да създам DESC индекс в MySQL?