AI u Databases MySQL...
Dan huwa żball sinifikanti li ħafna skemi tal-database iġġenerati mill-AI fil-preżent għandhom tendenza li jużaw VARCHAR(36) għall-kolonna id.
Dan huwa normalment imħeġġeġ minn xewqa li tiġi mpedita l-aċċess mhux awtorizzat mingħand atturi malizzjużi. Biex dan jinkiseb, UUID (Identifikaturi Uniċi Universali) spiss jintużaw bħala miżura ta' sigurtà.
Ħu WordPress bħala eżempju — dan normalment jeskoni l-IDs tal-posts fl-URL bħala ?p=45. Meta mqabbla ma' format user-friendly tal-SEO bħal /2025/05/sample-post, dan l-ID numeriku jippermetti lill-utenti li forsi jivvalutaw u jaċċessaw kontenut ħdejn billi jbiddlu n-numru (eż. ?p=44). UUID min-naħa l-oħra mhumiex sekwenzjali u huma ferm aktar diffiċli biex jitħammnu.
UUID huma strings ta' 36 karattru li jsegwu format standard bi ħames taqsimiet separati bi lineoli: 8-4-4-4-12. Kull sezzjoni tikkonsisti minn valuri eżadeċimali:
550e8400-e29b-41d4-a716-446655440000
f47ac10b-58cc-4372-a567-0e02b2c3d479
123e4567-e89b-12d3-a456-426614174000
Regex sempliċi biex tivvalida UUID tidher bħal dan:
^[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{4}-[a-fA-F0-9]{12}$
Filwaqt li l-UUID jipprovdu sigurtà u trasportabbiltà, jiġu b'kompromessi. Huma ferm akbar minn integers, li jistgħu jnaqqsu l-prestazzjoni tal-database — speċjalment meta jintużaw bħala ċwievet primarji fi databases relazzjonali. L-indiċjar, l-użu tal-memorja u l-veloċità tal-mistoqsijiet kollha jsofru minħabba d-daqs u n-natura mhux sekwenzjali tal-UUID.
Kurjuż dwar dan l-għażla tad-disinn, staqsejt din il-mistoqsija lil GitHub Copilot:
Jien:
Għaliex għażilt li tiddefinixxi l-kolonna id bħala VARCHAR(36) PRIMARY KEY fl-istruttura tal-database?
GitHub Copilot:
Għażilt
VARCHAR(36)għall-kolonni ID għal diversi raġunijiet speċifiċi:
- Ħżin UUID: It-tul ta' 36 karattru jakkumoda valuri UUID, li jsegwu format standardizzat.
- Sistemi Multi-tenant: UUID jgħinu jiżolaw inquilini billi jeliminaw tnixxija ta' ID sekwenzjali, jissimpifikaw migrazzjonijiet u jtejbu s-sigurtà.
- Trasportabbiltà tad-Data: UUID jiżguraw li d-data esportata m'għandhiex kunflitti ta' ID meta tiġi importata f'sistema oħra.
Kompromessi:
- Daqs ta' ħżin akbar (36 bytes kontra 4 bytes għal
INT)- Prestazzjoni tal-indiċjar u tal-mistoqsijiet eqreb
- Użu tal-memorja ogħla
Alternattivi biex tikkunsidra:
AUTO_INCREMENT INT/BIGINTBINARY(16)biex taħżen bytes UUID mhux ipproċessati b'mod aktar effiċjenti- Strateġija personalizzata ta' ġenerazzjoni ta' ID
Għid li taf jekk tippreferi approċċ differenti.
Jien:
Uża BIGINT UNSIGNED għall-prestazzjoni, iżda żomm qasam guid f'kull rekord għal referenzi esterni.
GitHub Copilot:
Se naġġorna l-iskema biex tuża
BIGINT UNSIGNEDgħaċ-ċwievet primarji u żid kolonnaguidgħar-referenzi esterni. Dan l-approċċ ibridu jgħaqqad l-aħjar mit-tnejn strateġiji:
- Prestazzjoni: Indiċjar effiċjenti u joins permezz ta' ċwievet primarji numeriċi
- Sigurtà u Trasportabbiltà: GUID espost fl-APIs, iżommu IDs interni siguri mill-enumerazzjoni
Sommarju:
BIGINT UNSIGNED: Mgħaġġel, kompatt, sekwenzjaliGUID (VARCHAR): Uniku, trasportabbli, sigur esternament
Filwaqt li d-databases relazzjonali joffru flessibilità fl-għażla bejn UUID, integers, jew approċċi ibridi, sistemi NoSQL bħal MongoDB jieħdu triq differenti.
MongoDB juża tip mibnija msejjaħ ObjectId għall-qasam _id tiegħu. Dan huwa valur binarju ta' 12-byte li jikkodifika:
Eżempju:
507f1f77bcf86cd799439011
VARCHAR(36). Huma wkoll aktar favur l-indiċjar.| Karatteristika | UUID (VARCHAR) | BIGINT + GUID ibridu | MongoDB ObjectId |
|---|---|---|---|
| Daqs tal-ħżin | 36 byte | 8 + 36 byte | 12-il byte |
| Prestazzjoni tal-indiċjar | Ħażin | Eċċellenti | Eċċellenti |
| Sekwenzjali / żmien | Le | Iva (BIGINT biss) | Iva (permezz ta' timestamp) |
| Format leġibbli mill-bniedem | Iva | Iva (GUID) | Le (ibbażat fuq hex) |
| Li jista' jitħammen | Le | Le (GUID biss) | Le |
| Infurzar tal-iskema | Strett | Strett | Flessibbli |
Ħafna sistemi ġġenerati mill-AI jużaw konfigurazzjonijiet NoSQL bħal MongoDB b'mod awtomatiku meta:
F'każijiet bħal dawn, huwa spiss għażla għaqli awtomatika li tużau ObjectIds jew identifikaturi uniċi simili, ordnati skont iż-żmien.