Kaip pridėti duomenų bazę prie savo programėlės (ir neprarasti duomenų vėliau)
Norėdami pridėti duomenų bazę prie programėlės, pasirinkite valdomą reliacinę duomenų bazę (dažniausiai numatyta Postgres), jos prisijungimo eilutę laikykite serverio pusės paslaptyje, sukurkite po vieną lentelę kiekvienam saugomam daiktų tipui ir leiskite savo serveriui, o ne naršyklei, skaityti ir rašyti į ją. Jei kuriate su DI programėlių kūrimo įrankiu, dažniausiai tiesiog galite pasakyti „įrašyk tai į duomenų bazę“, o agentas sukurs lenteles ir kodą. Jūsų užduotis – aiškiai aprašyti duomenis ir patikrinti, ar jie tikrai išsaugomi.
Šiame gide aptariama, kada jums reikia duomenų bazės, pagrindinės parinktys, kaip aprašyti duomenis ir klaidos, dėl kurių prarandami arba nutekinami duomenys.
Kada jūsų programėlei reikia duomenų bazės
Duomenų bazės reikia, kai programėlė turi prisiminti ką nors po to, kai puslapis uždaromas, arba bendrinti duomenis tarp žmonių. Tipiniai požymiai:
- Lankytojai ką nors pateikia: formą, registraciją, rezervaciją, užsakymą
- Naudotojai turi paskyras su savo išsaugotu turiniu
- Administratorius turi matyti arba redaguoti tai, ką sukūrė kiti
- Norite ataskaitų ar skaičiavimų laikui bėgant
Duomenų bazės nereikia statinei svetainei, kurioje visi mato tą patį turinį, pavyzdžiui, portfelio ar paprastam nukreipimo puslapiui. Jei nesate tikri, kas iš tikrųjų yra duomenų bazė, pirmiausia perskaitykite kas yra duomenų bazė.
Jūsų parinktys
| Parinktis | Kas tai yra | Tinka | Kompromisai |
|---|---|---|---|
| Įmontuota duomenų bazė iš programėlių kūrimo įrankio | Duomenų bazė, sukurta ir prijungta jūsų projektui | Daugumai programėlių, kurias kuriate su DI įrankiu | Priklauso nuo tos platformos talpinimo; eksportas ir atsarginės kopijos priklauso nuo platformos |
| Valdomas Postgres ar MySQL | Talpinama reliacinė duomenų bazė, kurią užsisakote atskirai | Programėlės, kurias talpinate patys arba kurias naudoja kelios paslaugos | Jūs valdote raktus, jungčių limitus ir planus |
| Backend-as-a-service | Duomenų bazė kartu su autentifikavimu, saugykla ir API viename produkte | Programėlės su daugiau priekinės dalies, kurioms reikia paruošto prisijungimo | Daugiau į tiekėją orientuotų sąvokų, kurias reikia išmokti |
| Dokumentų (NoSQL) duomenų bazė | Saugo lanksčius JSON tipo dokumentus | Labai nereguliarūs duomenys | Ryšius ir ataskaitas sunkiau įgyvendinti |
| Skaičiuoklė kaip duomenų bazė | Google Sheets ar panaši per API | Maži vidiniai įrankiai, prototipai | Lėta, nėra tikrų apribojimų, lūžta, kai keli redaguoja vienu metu |
Daugumai mažų ir vidutinių žiniatinklio programėlių tinkamiausias pasirinkimas yra reliacinė duomenų bazė, pavyzdžiui, Postgres. Ji gerai tvarko ryšius (vienas klientas turi daug užsakymų), išlaiko duomenų nuoseklumą ir vėliau leidžia atsakyti į klausimus naudojant SQL. Paprastą paaiškinimą, kas yra Postgres, rasite kas yra Postgres.
Aprašykite duomenis prieš kurdami
Naudingiausia, ką galite padaryti, – užsirašyti daiktus, kuriuos jūsų programėlė saugo, ir kaip jie susiję. Duomenų bazės žargonas nereikalingas. Rezervacijų programėlei tai gali atrodyti taip:
- Klientai: vardas, el. paštas, telefonas
- Paslaugos: pavadinimas, trukmė, kaina
- Rezervacijos: kuris klientas, kuri paslauga, pradžios laikas, būsena (laukiama, patvirtinta, atšaukta)
Tai trys lentelės. „Kuris klientas“ ir „kuri paslauga“ tampa ryšiais (užsienio raktais) tarp jų. Tai, kaip teisingai tai padarysite iš pradžių, svarbu daug labiau nei bet koks technologijos pasirinkimas, nes duomenų, kurie jau turi tikrų įrašų, struktūrą pakeisti sunkiau nei puslapio maketą.
Keletas praktinių taisyklių:
- Viena lentelė vienam daiktų tipui. Neįdėkite užsakymų į teksto stulpelį klientui.
- Kiekvienam įrašui suteikite ID ir sukūrimo laiką. Vėliau abiejų prireiks.
- Naudokite tinkamus tipus. Datos – kaip datos, pinigai – sveikais centais arba dešimtainiu tipu, o ne tekstu.
- Pažymėkite privalomus laukus kaip privalomus. Tegul duomenų bazė atmeta blogus duomenis, o ne tik forma.
Raginimų pavyzdžiai
Pradėkite nuo vienos funkcijos vienu metu, o ne išmeskite visą schemą iš karto:
Pridėk duomenų bazę prie šios programėlės. Sukurk rezervacijų lentelę su kliento vardu, el. paštu, paslauga, pradžios laiku ir būsena (laukiama, patvirtinta, atšaukta; numatytoji – laukiama). Išsaugok rezervacijų formos pateikimus joje, rodyk sėkmės pranešimą ir pridėk administratoriaus puslapį, kuriame rezervacijos rodomos nuo naujausios.
Tada ją išplėskite:
Pridėk paslaugų lentelę (pavadinimas, trukmė minutėmis, kaina centais). Pakeisk laisvo teksto paslaugos lauką rezervacijose ryšiu su paslaugomis ir perkelk esamas rezervacijas nieko neištrindamas.
Ir sugriežtink:
Įsitikink, kad visi duomenų bazės skaitymai ir rašymai vyksta serveryje. Naršyklė niekada neturi gauti duomenų bazės prisijungimo eilutės. Prieš įrašydamas patikrink el. paštą ir pradžios laiką serveryje.
Žingsnis po žingsnio
- Surašykite savo duomenis kaip aprašyta aukščiau: daiktai, laukai, ryšiai tarp jų.
- Sukurkite duomenų bazę. DI kūrimo įrankyje tai paprašykite pokalbyje. Kitur sukurkite valdomą Postgres egzempliorių ir nukopijuokite jo prisijungimo eilutę.
- Išsaugokite prisijungimo eilutę kaip paslaptį (aplinkos kintamąjį serveryje), niekada kode. Žr. aplinkos kintamieji ir paslaptys.
- Sukurkite lenteles. Naudokite migracijas – versijuotus scenarijus, keičiančius schemą, kad pakeitimai būtų pakartojami ir atšaukiami.
- Sukurkite serverio maršrutus, kurie kuria, skaito, atnaujina ir trina eilutes (CRUD). Naršyklė kviečia šiuos maršrutus; ji niekada tiesiogiai nebendrauja su duomenų baze.
- Prijunkite vartotojo sąsają prie tų maršrutų: formos, kurios išsaugo, sąrašai, kurie įkeliami, tuščios būsenos, kai dar nieko nėra.
- Patikrinkite, ar duomenys išlieka. Pateikite ką nors, perkraukite puslapį, atidarykite kitoje naršyklėje. Jei duomenų nėra, jie nebuvo išsaugoti duomenų bazėje.
- Patikrinkite prieigą. Prisijunkite kaip antras naudotojas ir įsitikinkite, kad negalite matyti ar redaguoti pirmojo naudotojo duomenų.
- Publikuokite, tada vėl patikrinkite tikrame URL, nes publikuota programėlė gali naudoti kitokį ryšį nei jūsų peržiūra.
Dažnos klaidos
- Išsaugojimas naršyklėje laikomas tikru išsaugojimu. localStorage atrodo kaip veikiantis, kol kas nors neatidaro programėlės kitame įrenginyje. Visada tikrinkite antroje naršyklėje.
- Prisijungimo eilutė frontend kode. Bet kas gali perskaityti frontend kodą. Tai suteikia prieigą prie visos jūsų duomenų bazės.
- Nėra prieigos patikrinimų. „Rodyk mano užsakymus“ turi filtruoti pagal prisijungusį naudotoją serveryje, o ne vartotojo sąsajoje. Tai dažniausia saugumo spraga DI kurtose programėlėse; mūsų saugumo kontrolinis sąrašas jai skirtas.
- Destruktyvūs schemos pakeitimai. Prašymas „pervadink lentelę“ ar „pakeisk struktūrą“ gali ją ištrinti ir sukurti iš naujo. Kai egzistuoja tikri duomenys, sakykite: „perkelk esamas eilutes, nieko netrink“.
- Failų saugojimas duomenų bazėje. Nuotraukos ir PDF failai turi būti failų saugykloje, o lentelėje – tik jų URL ar raktas. Žr. kaip pridėti failų įkėlimus.
- Nėra atsarginių kopijų. Prieš turėdami klientų, sužinokite, kaip jūsų platforma daro atsargines kopijas ir kaip jas atkurti.
Kontrolinis sąrašas
- Kiekvienas daiktų tipas turi savo lentelę su ID ir sukūrimo laiku
- Privalomi laukai ir tipai užtikrinami duomenų bazės
- Prisijungimo eilutė yra tik serverio pusės paslaptyse
- Visi skaitymai ir rašymai eina per serverio maršrutus
- Kiekvienas naudotojas gali skaityti ir keisti tik savo eilutes
- Duomenys išlieka perkrovus puslapį ir matomi kitoje naršyklėje
- Schemos pakeitimai naudoja migracijas ir išsaugo esamas eilutes
- Žinote, kaip veikia atsarginės kopijos ir atkūrimas
- Tiesiogiai veikiančia programėlė išbandyta po publikavimo
Duomenų bazės pridėjimas Mythex
Mythex kiekvienas projektas gali gauti savo atskirą Postgres duomenų bazę – tiek Free, tiek Pro planuose. Paprastai neturite spausti atskiro „prijungti“ mygtuko: paprašykite pokalbyje („išsaugok laukiančiųjų sąrašo el. paštus į duomenų bazę“) arba įveskite /database, o prisijungimo duomenys įterpiami į darbo aplinką ir jūsų publikuotą programėlę. Projekto nustatymuose matote, ar duomenų bazė aktyvi.
Duomenų bazė užmiega po 5 neaktyvių minučių ir pabunda kitos užklausos metu. Publikuotas naudojimas apmokamas už laiką, kai ji iš tikrųjų buvo aktyvi, iš to paties kreditų balanso, kurį naudojate kurdami. Jei duomenų bazę pridėjote jau po publikavimo, publikuokite dar kartą, kad tiesiogiai veikianti programėlė ją pasiimtų.
Žr. Duomenų bazė ir CRUD programėlės kūrimo receptą dokumentacijoje. Apie prisijungimo pusę, skirtą duomenims pagal naudotoją, skaitykite kaip pridėti prisijungimą prie programėlės.
Klausimai
Ar man reikia duomenų bazės savo programėlei?
Reikia, kai tik jūsų programėlė turi ką nors prisiminti tarp apsilankymų arba bendrinti duomenis tarp naudotojų: registracijas, užsakymus, rezervacijas, įrašus ar nustatymus. Statinei svetainei, kuri visiems rodo tą patį turinį, duomenų bazės nereikia.
Kurią duomenų bazę rinktis mažai žiniatinklio programėlei?
Daugeliui mažų žiniatinklio programėlių saugiausias pasirinkimas – reliacinė duomenų bazė, pavyzdžiui, Postgres. Ji gerai tvarko naudotojus, užsakymus, ryšius ir ataskaitas, yra plačiai palaikoma, o mažame mastelyje jos beveik niekada neperaugate.
Ar galiu saugoti duomenis naršyklėje vietoj duomenų bazės?
Naršyklės saugykla, pavyzdžiui, localStorage, veikia tik viename įrenginyje ir vienoje naršyklėje, be to, naudotojas bet kada gali ją išvalyti. Ji tinka nuostatoms, pavyzdžiui, temos pasirinkimui, bet ne tam, ką jums ar kitiems naudotojams reikės matyti vėliau.
Ar Mythex turi duomenų bazę?
Taip. Mythex projektas gali turėti savo atskirą Postgres duomenų bazę Free ir Pro planuose. Ją galite užsakyti pokalbyje arba naudoti komandą /database, o prisijungimo duomenys įdedami automatiškai. Naudojimas apmokamas iš to paties kreditų balanso, kuris naudojamas kuriant.