Verilənlər bazası-Müxtəlif məhsullar üçün müxtəlif xüsusiyyətlər

Salam hər kəsə. Qarşımda belə ideya var. Məsələn, müxtəlif malların satışını edən bir CMS yazmaq lazımdır. İndidən bilmək olmaz, sabah bu saytda nə tip mallar satılacaq. Mal hər hansı bölməyə aid olur. Məsələn bu tip bölmələr var: TV, telefon, şalvarlar, köynəklər və s. Tam müxtəlif yönümlü. Sabah yeni bölmə də yarana bilər, məsələn:məişət cihazları və s. Məqsədim: Mənə lazımdır ki, elə edim ki, hər mal tipinə aid öz xüsusiyyətləri olsun. Fikrimcə admin paneldə yeni xüsusiyyət əlavə etmək üçün yer olacaq. Məsələn yeni xüsusiyyət: Diaqonal, çəki, rəng və s. əlavə edilir. Sonra bölmə nizamlamalarında bu bölməyə hansı xüsusiyyətlərin aid olması göstərilir ( çekbokslarla seçilir). Məsələn. TV bölməsində çəki, diaqonal kimi xüsusiyyətlər olsun. TV bölməsinə aid mal əlavə edəndə ancaq bu xüsusiyyətlər doldurulur və saytda ancaq bunlar görsənir. Saytda bunlar üzrə sıralama, axtarış və s. ola bilər. Fikrinizcə MySQL baza necə qurulmalıdır? Mənim 1-2 ideyam var, ancaq optimal olduğunu düşünmürəm və sorğu sayı çoxalır bu variantlarda. Sizin fikrinizi bilmək maraqlı olardı.

Verilmiş cavablar və yazılan şərhlər (3 cavab var)

admin (2010-12-14 13:14:31)
Bildiyim qədərilə burda əsas məqsəd saytın istifadəçi tərəfində axtarış, kataloqa baxış və.s. zamanı ağıq sql-lərdən qaçmaqdır, yoxsa ki 2 və ya 3 table ilə məsələni həll etmək olar. Mən belə bir şey təklif edərdim, bazada məhsullara dair 2 table qurmaq, biri products biri də options. Optionsda option_id və option description. Products-da product_id,...,product_options. product_options text olsun və adminkadan bütün seçilən optionlar [id value id] formatında yan-yana yazılsın o columna. [1 Televizor 1] [2 223 2] [3 AZN 3] kimi. Bu halda adminkada edit edən zaman normal şəkildə inner join-lə hər iki table update olacaq,user-side axtarış zamanı isə cəmi bircə table-a query olacaq. products-a. məsələn təxminən belə SELECT product_id,product_name,product_description FROM products HAVING SUBSTR(product_description, CHARİNDEX('['+product_id,product_description), CHARİNDEX(product_id+']', product_description)) =".$id." " ... Nə dərəcədə optimaldır bilmirəm, sadəcə variant kimi dedim. Yəqin DB mütəxəssislərimiz daha yaxşı həllər yazacaqlar. :)

Samir Azeri (2010-12-14 12:27:31)
Bu varianta oxşar variant var idi. Bir az problem yaranır. Məsələn məlumatlar saxlanan column hər şeyi nəzərə almaq üçün TEXT tipli yaradıldı məsələn, o zaman ora 1cə rəqəmli bir şey yazmaq lazım gələndə TEXT üçün ayrılmış yerə 1 simvol yazmaq düz gəlmir.

Rashad Aliyev (2010-12-14 11:58:50)
Mence texmini bele bir shey, Xirda komekchi table-leri yazmiram. 1) Bolmelerin adlari ve ID-ler 2) Bolmelerdeki fieldler, ID-lerle bolmere baghlanirlar 3) Uje melumatlar