Мазмунга өтүү

Сабактын башталышы

SQL менен JSON колдонуу

Реляциялык базанын ичинде жарым-структуралуу маалыматты сактоо, чыгаруу, куруу, текшерүү жана индекстөө

Негизги идея: JSON тибиндеги мамыча бир уячага жалпак скаляр маанинин ордуна бүтүн документти — ички объекттерди жана массивдерди — сактоого мүмкүндүк берет. MySQL бул документти жазууда талдап, текшерет, андан кийин суроо учурунда анын ичине жетүү үчүн функциялардын үй-бүлөсүн жана -> / ->> операторлорун берет. Бул сейрек, өзгөрмө же өнүгүп жаткан атрибуттар үчүн күчтүү, бирок бул нормалдаштыруудан баш тартууга уруксат эмес: ар бир долбоор тандоосу схеманын ийкемдүүлүгүн суроонун иштешине жана маалыматтын бүтүндүгүнө алмаштырат.
Бул теманын аягында сиз кыла аласыз:
  • JSON мамычасын жарыялоо жана MySQL аны кантип сактап, текшерерин түшүнүү,
  • JSON_EXTRACT, -> оператору жана тырмакчаны алып салуучу ->> оператору менен маанилерди чыгаруу,
  • $.color, $.tags[0] же $.dims.w сыяктуу JSON-жолду окуу,
  • JSON_OBJECT, JSON_ARRAY менен JSON куруу жана JSON_ARRAYAGG / JSON_OBJECTAGG менен агрегациялоо,
  • JSON_SET, JSON_REMOVE жана окшоштору менен документтерди өзгөртүү,
  • JSON_VALID / JSON_TYPE менен текшерүү жана генерацияланган мамычалар менен көп мааниси бар индекстер аркылуу JSONду индекстөө,
  • чыныгы реляциялык таблица JSON-блобдон качан жакшы экенин чынчыл чечүү.

1. Биздин мисал схемабыз

Төмөндөгүлөрдүн баары бир кичинекей дүкөн базасынын үстүнөн иштейт. Ар бир товардын бир нече туруктуу мамычасы жана attributes деген JSON мамычасы бар, ал товарлар боюнча айырмаланган баарын алып жүрөт: түс, өлчөм, тегдер массиви, ички өлчөмдөр. Телефон менен футболканын мүнөздөмөлөрү бирдей эмес, ал эми ондогон дээрлик бош мамычасы бар кең таблица ойлоп табуу ысырапкорчулук болмок — бул JSON үчүн классикалык учур.

CREATE TABLE products (
  product_id  INT PRIMARY KEY AUTO_INCREMENT,
  name        VARCHAR(100) NOT NULL,
  price       DECIMAL(8,2) NOT NULL,
  attributes  JSON
);

INSERT INTO products (name, price, attributes) VALUES
  ('Cotton Tee', 19.99,
   '{"color":"red","size":"M","tags":["sale","cotton"]}'),
  ('Running Shoe', 89.50,
   '{"color":"black","size":42,"tags":["sport"],"dims":{"w":10,"h":30}}'),
  ('Ceramic Mug', 12.00,
   '{"color":"white","tags":[]}');

Байкаңыз: экинчи сапта ички dims объекти жана сандык size бар, ал эми кружкада size таптакыр жок жана tags массиви бош. JSON бул саптар боюнча вариацияга чыдайт; туруктуу мамычалар топтому — жок.

Бул сабакты YourAIZone платформасында улантыңыз

Толук сабакта — толук түшүндүрмө, чыгарылган мисалдар, көп кездешкен каталар, заматта текшерилүүчү тесттер жана ЖИ-репетитор. Конок катары дароо баштаңыз же прогрессти сактоо үчүн аккаунт түзүңүз.

Толук сабакта

  • Толук түшүндүрмө
  • Чыгарылган мисалдар
  • Көп кездешкен каталар жана алардан кантип качуу керек
  • Тест суроолору: 15
  • Тема боюнча суроолорго жооп берген ЖИ-репетитор
  • Окуучу, ата-эне жана мугалим үчүн прогрессти көзөмөлдөө