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

Нормализиране на MySQL данни

Отговорът на всичките ви въпроси наистина зависи от това за какво са предназначени JSON данните и дали някога ще трябва да използвате някакво свойство на тези данни, за да определите кои редове се връщат.

Ако вашите данни наистина нямат схема и наистина ги използвате само за съхраняване на данни, които ще бъдат използвани от приложение, което знае как да извлича правилния ред по някои други критерии (като едно от другите полета) всеки път, няма причина да го съхранявате като нещо различно от точно както това приложение го очаква (в този случай JSON).

Ако данните в JSON НАПРАВО съдържат някаква структура, която е една и съща за всички записи, и ако е полезно да правите заявки за тези данни директно от базата данни, бихте искали да създадете една или повече таблици (или може би само още няколко полета), за да съхранявате тези данни .

Като практически пример за това, ако полетата с данни съдържат JSON изброяващи услуги за този потребител в масив и всяка услуга има уникален идентификатор, тип и цена, може да искате отделна таблица със следните полета (използвайки вашето собствено именуване конвенции):

serviceId (integer)
userName (string)
serviceType (string)
servicePrice (float)

И всяка услуга за този потребител ще получи свой собствен запис. След това можете да потърсите потребители, които имат конкретна услуга, която в зависимост от вашите нужди може да бъде много полезна. В допълнение към лесните заявки, индексирането на определени полета на отделните таблици може да направи и много БЪРЗИ заявки.

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

# user table
userId (integer, auto-incrementing)
userName (string)
userEmail (string)
password (string)
deviceID (string)

# note table
noteId (integer, auto-incrementing)
userId (integer, matches user.userId)
noteTime (datetime)
noteData (string, possibly split into separate fields depending on content, such as subject, etC)

# request table
requestId (integer, auto-incrementing)
userId (integer, matches user.userId)
requestTime (datetime)
requestData (string, again split as needed)

След това можете да направите заявка така:

# Get a user
SELECT * FROM user WHERE userId = '123';
SELECT * FROM user WHERE userNAme = 'foo';

# Get all requests for a user
SELECT * FROM request WHERE userId = '123';
# Get a single request
SELECT * FROM request WHERE requestId = '325325';

# Get all notes for a user
SELECT * FROM note WHERE userId = '123';
# Get all notes from last week
SELECT * FROM note WHERE userId = '123' AND noteTime > CURDATE() - INTERVAL 1 WEEK;

# Add a note to user 123
INSERT INTO note (noteId, userId, noteData) VALUES (null, 123, 'This is a note');

Забележете колко повече можете да направите с нормализирани данни и колко лесно е? Тривиално е да намерите, актуализирате, добавите или изтриете конкретен компонент.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mysql пространствено разстояние с помощта на POINT - Не работи

  2. Как да извлечете json данни и да вмъкнете в mysql php

  3. Как да предотвратим превишаване на max_user_connections при презареждане/опресняване на страницата многократно?

  4. Внедряване на база данни с най-гледани функции

  5. Свържете няколко полета в едно с SQL