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 бул саптар боюнча вариацияга чыдайт; туруктуу мамычалар топтому — жок.