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.