database
Project ni boshlashdan oldin bizda texnik topshiriqlar to'plami va frontend uchun qilingan design bo'ladi.
Structure database uchun postgres yoki mysql
Ko'p boshlang'ich dasturchilar yo'l qo'yadigan xatolardan biri database design bilan ishlamaslik. database design(UML diagramms) bizga hali code yozmasdan oldin ma'lumotni shaklini ko'rishga imkon beradi va database bilan bog'liq xatolarni oldindan ko'ramiz. Code yozilgandan keyin va ma'lumot bilan to'lgan database da bitta column qo'shish ham bazida juda ko'p o'zgarishlarga olib keladi. Database design ni oldindan tuzib olish shu muammolarni bartaraf qiladi.
Project online elektron do'kon. Shuning uchun ko'proq logikalar product atrofida aylanadi. Database sxema product table bilan boshlanadi.

product da ko'rishimiz mumkinki (title, brand, color, memory, quantity, price, images), pastgi qismda parametrlar bor, media file lar bilan alohida ishlaymiz shu uchun images ga chalg'imaymiz. Oddiy holda product table shu ko'rinishda bo'ladi.

Bir xil brand ga tegishli product lar bo'ladi shuning uchun brand uchun alohida table yaratishimiz kerak va product bilan one to many ko'rinishida bog'lanadi.

Parameters column xilma xil bo'lishi mumkin lekin product uchun o'zgarmas bo'ladi masalan material, og'irlik shunga o'xshash. parametr table yaratamiz va one to many relation bilan bog'lanadi. misol uchun: (title: material, value: titan)

Elektron product larni color, memory dan tashqari boshqa o'zgarib turuvchi variantlari bo'lishi mumkin display, prosessor shunga o'xshash. Bu muammoni hal qilish uchun SQL database uchun EAV pattern(entity, attribute, value) mavjud o'zgarishi mumkin bo'lgan parametr ajratib olamiz, many to many relation bilan bog'lanadi. Bu biz hohlagan malumotni saqlay oladi. Misol: (product.title:"iphone XR", (attribute:"memory", (value:"64GB", value:"128GB")), (attibute:"color", (value:"black", value:"green"))).

Product price va quantity uchun stock table dan foydalanamiz. stock.attributes json object saqlaydi.
[{"attribute_id":4,"value_id":19}, {"attribute_id":4,"value_id":16}, {"attribute_id":3,"value_id":105}]
shu attribute larga ega bo'lgan product ni narxi va omborda mavjud soni one to many saqlanadi.

Product data deyarli tayyor holga keldi qolgan ishlar category va tag table lar. Category table ni vazifasi bizni tayyor product qaysi product turi ekanligini bildiradi. Elektron qurilmalar, aksisuarlar va boshqalar. Subcategorylar bo'lishi mumkin, elektron qurilmalarni ichida smartfon va noutbuklar bo'lishi mumkin eng oddiy yo'li category table ni o'zida category_id column va one to many saqlash.

tag table ni vazifasi chegirmalarni saqlash (top product, 30% aksiya). bu category ga o'xshash bo'ladi.

Product data tayyor. Keyingi ish user bilan qilinadi. product ni cart ga qo'shish uchun , bizda user va cart table kerak. Cart ga esa aynan tanlangan product ni qo'shishimiz kerak, demak product emas stock cart ga qo'shiladi. quantity ni ham cart table ma'lum vaqt saqlab turadi.

User product ni sotib olmoqchi cart ga qo'shdi va order yaratishi kerak. Bitta order table bilan ko'proq product larni yaratishda muammo bo'lishi mumkin, shu uchun orderItem table yaratamiz va unda har bir product.stock ni order dan oldin saqlaymiz va bitta yoki bir nechta orderItem lar bitta order ni tashkil qiladi va order user ga one to many ko'rinishda saqlanadi. Order da status column bo'ladi to'lov qilingan yoki yo'q, yetkazildi yoki yo'qligini bildiradi.

product.images, brand.images, catergory.images bular hammasi media file ularni media table da saqlaymiz va polymorphic relation bilan bog'lanadi.

database schema elektron do'konimiz uchun tayyor holga keladi.
