Автор Тема: MySQL, подреждане на информация  (Прочетена 1025 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
MySQL, подреждане на информация
« -: 24 Юли 2011, 15:30:19 »
Здравейте на всички. Пиша онлайн игра, но ми изскочи още един проблем с базата данни, просто не знам как да подредя колоните, сещам се за два варианта, но и двата са нереални, защото при един от начините ще трябва да имам около 70 колони, и тогава редовете ще са колкото регистрираните играчи (Да кажем че регистрираните играчи са 100). Това прави таблица с 70 колони и 100 реда (редовете се увеличават спрямо броя на играчите). Втория вариант е 4 колони, но пък 70 реда за всеки играч, което прави таблица с 4 колони и 700 реда. Тези 70 колони в първия случай(70 редове в втория случай) са самолети, танкове с различни имена, различни характеристики. Няма как да ги обединя под един обединя под 1 знаменател (докато пишех, че няма как да ги обединя ми хрумна една идея, да ги разделя в няколко таблици - една с танкове, една със самолети и така нататък. Това ми се струва най-добрия вариант. Как ви звучат 2 таблици с по около 30-40 колони и още 2 таблици с по 15-тина колони? И всичко това на споделен хостинг?)

OFFTOPIC: Съжалявам, ако темата ви се струва глупава, просто това само ми хрумва за момента.
Ако не съм обяснил добре, за какво става въпрос, кажете, ще си опиша проблема по-добре :)
« Последна редакция: 24 Юли 2011, 15:49:44 от aliench0 »

federer_11

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 0
  • -Получени: 1
  • Публикации: 931
  • ULTRAS LEVSKI
Re:MySQL, подреждане на информация
« Отговор #1 -: 24 Юли 2011, 16:01:37 »
Обясни по-подробно каква точно ти е целта. :)
(x)HTML, CSS, PHP, MySQL, XML, WML, JavaScript (jQuery)

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re:MySQL, подреждане на информация
« Отговор #2 -: 24 Юли 2011, 16:26:43 »
Целта ми е всичко да е по-удобно, по-подредено,а 40 колони в една таблица ни най малко не ми се вижда подредено.Замисълът е такъв:
Имам една база данни "militaries", в нея има таблици - tanks, airplanes. Ще има и още 3-4 таблици със същия замисъл, но просто още не съм ги направил. В тези таблици са изредени всички танкове и самолети който ще участват в играта, заедно с техните характеристики. Искам да мога да записвам каква войска има всеки играч. Като това стане в рамките на възможно най-малко таблици, редове и колони.
Мислех да е нещо подобно:

Username | Name           | Count
----------------------------------
user1       | T-34 (танк)  |    5
----------------------------------
user1       |  T-90 (танк) |    15
----------------------------------
user1       |  MIG-29 (самолет) | 20

Но затова ще ми трябват над 70 реда за всеки играч ако записвам цялата техника която има (да речем че има само самолети и танкове)

Другия вариант е:

Username | T-34 | T-90 | MIG-29 | ..........
------------------------------------------
user1       |   5    |  15   |     20   | ..........
------------------------------------------
user2       |   12   |  20   |     30   | ..........

Но пък това означава 70 колони, което пак е много.
Помислих да ги разделя в отделни таблици в друга база данни (различна от "militaries")
Таблица:tanks

Username | T-34 | T-90 | ..........
------------------------------------------
user1       |   5    |  15   | ..........
------------------------------------------
user2       |   12   |  20   | ..........

Тук са само 30 колони (например)

Таблица:airplanes

Username | MIG-21 | MIG-29 | ..........
------------------------------------------
user1       |   6       |     8     | ..........
------------------------------------------
user2       |     13    |    30    | ..........

А тук да са останалите 40 колони, как ви се струва, ще падне ли производителността от многото информация?
Ако може да свържа някак таблиците в "militaries" (tanks, airplanes) да се свържат с Юзърите и да отброяват войската им... но просто не виждам как може да стане, давайте идеи, приемам всякакви, дори и да са налудничави :)
« Последна редакция: 24 Юли 2011, 16:30:29 от aliench0 »

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re:MySQL, подреждане на информация
« Отговор #3 -: 24 Юли 2011, 17:39:46 »
В такъв случай, седни и прочети някое книжле за SQL и MySQL, защото никой по-добре от теб не знае как да направи design-a си.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

wuser

  • Administrator
  • Hero Member
  • *****
  • Благодарности
  • -Казани: 85
  • -Получени: 49
  • Публикации: 2761
Re:MySQL, подреждане на информация
« Отговор #4 -: 24 Юли 2011, 18:30:32 »
Явно книжки е чел, сега това дето трябва да направи е да изпита кой от вариантите е по-производителен и да помисли а някаква нормализация.
Мъдростта на патилото
Perl Monks: PHP - it's "training wheels without the bike" -- Randal L. Schwartz


Дееба... чувствам се все едно обяснявам на майка ми как да си отвори пощата
"не работи"
WTF?!?!? к'во значи че не работи?
Не ти се компилира, дава ти грешка, вади ти грешни резултати, компютърът ти се изключва като го напишеш или на целия квартал му спира тока?
Stilgar

jazzman

  • Hero Member
  • *****
  • Благодарности
  • -Казани: 25
  • -Получени: 190
  • Публикации: 3623
Re:MySQL, подреждане на информация
« Отговор #5 -: 24 Юли 2011, 19:18:16 »
Явно книжки е чел, сега това дето трябва да направи е да изпита кой от вариантите е по-производителен и да помисли а някаква нормализация.
Ами ако е чел книжки само мога да поздравя, отговора му ще дойде много скоро..
Повечето народ от форума си мислят, че уроците на Иван са достатъчни.
Java is to Javascript as fun is to funeral.

http://nau4i.me/forum/index.php/topic,15129.0.html

aliench0

  • Newbie
  • *
  • Благодарности
  • -Казани: 10
  • -Получени: 0
  • Публикации: 42
Re:MySQL, подреждане на информация
« Отговор #6 -: 24 Юли 2011, 20:24:04 »
Ще си направя едно тестче, за да видя на кой вариант ще се спра. Все си мисля, че последния вариант е най-удачен. После ще пиша :)

dns

  • Full Member
  • ***
  • Благодарности
  • -Казани: 0
  • -Получени: 0
  • Публикации: 193
Re:MySQL, подреждане на информация
« Отговор #7 -: 26 Юли 2011, 23:52:54 »
Целта ми е всичко да е по-удобно, по-подредено,а 40 колони в една таблица ни най малко не ми се вижда подредено.Замисълът е такъв:
Имам една база данни "militaries", в нея има таблици - tanks, airplanes. Ще има и още 3-4 таблици със същия замисъл, но просто още не съм ги направил. В тези таблици са изредени всички танкове и самолети който ще участват в играта, заедно с техните характеристики. Искам да мога да записвам каква войска има всеки играч. Като това стане в рамките на възможно най-малко таблици, редове и колони.
Мислех да е нещо подобно:

Username | Name           | Count
----------------------------------
user1       | T-34 (танк)  |    5
----------------------------------
user1       |  T-90 (танк) |    15
----------------------------------
user1       |  MIG-29 (самолет) | 20


....

А тук да са останалите 40 колони, как ви се струва, ще падне ли производителността от многото информация?
Ако може да свържа някак таблиците в "militaries" (tanks, airplanes) да се свържат с Юзърите и да отброяват войската им... но просто не виждам как може да стане, давайте идеи, приемам всякакви, дори и да са налудничави :)

Според мен трябва да направиш така:

TABLE: "militaries"

  militaries_id  |  militaries_name  | type        |  param_1  |  param_2 |  ....
-------------------------------------------------------------------------
  23565          |  tank A              |  tank        |  2            |  4            |  ....
  45685          |  tank B              |  tank        |  7            |  5            |  ....
  89789          |  tank C              |  tank        |  8            |  7            |  ....
  78521          |  airplanes A        |  airplan    |  2            |  4            |  ....
  23685          |  airplanes B        |  airplan    |  7            |  5            |  ....
  14789          |  airplanes C        |  airplan    |  8            |  7            |  ....
  53565          |  soldiers A          |  soldier    |  2            |  4            |  ....
  84785          |  soldiers B          |  soldier    |  7            |  5            |  ....
  19789          |  soldiers C          |  soldier    |  8            |  7            |  ....


TABLE:  "Users"

    User_id  |  User_name  |  pass  |  mail  |  ....
--------------------------------------------------------
  23565      |  Ivan          |  ****  |  .....   |  ....
  45685      |  Dragan      |  ****  |  .....   |  ....
  89789      |  Petkan       |  ****  |  .....   |  ....


TABLE:  "user_militaries"

    user_name   |  militaries_name   | number |
-------------------------------------------------------------
     Petar          |  soldiers B         |  23        |

     Petar          |  airplanes C       |  15        |

     Dragan      |  tank C              |  23        |

     Dragan      |  airplanes B        |  15        |

     Dragan      |  airplanes A        |  23        |

     Petkan       |  tank C             |  15        |


Значи когато ти трябва войската на  Petar  правиш селекция:

SELECT militaries_name , number FROM User_militaries WHERE  user_name  = "Petar"

...и ще ти върне масив с:

     Petar          |  soldiers B         |  23        |

     Petar          |  airplanes C       |  15        |

-------------------------------------------------------------------

Ако ти трябва войската на Petar и нейните параметри правиш селекция:

SELECT  militaries_name , number ,type , param_1, param_2 

  FROM  user_militaries, militaries

WHERE  user_militaries.user_name = 'Petar'

    AND  user_militaries.militaries_name  = militaries.militaries_name


...и ще ти върне масив броя на типа и параметрите на Petar:

     Petar          |  soldiers   B       |  23        |  soldier    |  7            |  5            |  ....

     Petar          |  airplanes C       |  15        |  airplan     |  8           |  7            |  ....

-------------------------------------------
важна забележка


  Таблицата user_militaries ТРЯБВА ДА ИЗГЛЕЖДА ТАКА


   user_id       |  militaries_id   | number |
-------------------------------------------------------------
     54544      |  3453312313    |  23        |

     45454      |  213131          |  15        |

     45545      |  123123          |  23        |

     45454      |  213131          |  15        |

     45545      |  123123          |  23        |


нарочно направих горният пример с колони  user_name    militaries_name  , за да е по ясен примера !!!


-------------------------------------------
важна забележка


Съветвам те да помислиш  и за таблица в която се описват коефициентите на взаимодействие между различните ТИПОВЕ  militaries

все пак няма да е много логично АКО драган с двама войници  , победи победи петър който има един танк ;D

Примерно

койфицента  на войник с картечница СПРЯМО танк е  трябва да е 0
койфицента  на танк СПРЯМО войник с картечница е  трябва да е 10

Ако драган има 100 войника с картечници  и се сбие с Петкан който има три танка

сметките за изхода от битката би трябвало да изглеждат така
----------------------------------------
драган

$soldiers_power = 2;
$soldiers_count  = 100;
$soldiers_coefficient_to_tank = 0;

$dragan_power = $soldiers_power*$soldiers_count*$soldiers_coefficient_to_tank;
$dragan_power = 0
-----------------------------------------------------------------------

Петкан

$tank_power = 24;
$tank_count  = 2;
$tank_coefficient_to_soldiers = 10;

$petkan_power = $tank_power*$tank_count*$tank_coefficient_to_soldiers;
$petkan_power  = 480
-----------------------------------------------------------------------