Форум

Data.BG Форуми: Kaк да си организирам базата данни? - Data.BG Форуми

Прехвърляне към съдържание

Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

Kaк да си организирам базата данни?

#1
Потребителят е неактивен   Rationality 

  • Група: Потребители
  • Мнения: 1416
  • Регистриран: 16-May 10
  • Репутация: 42
всички уроци по бази данни които съм гледал обясняват синтактиса и работата с бази данни. Но не съм срещал уроци за организиране на базата данни.

Сега правя първото си андроид приложение където има потребители, продукти, лайкване, следване, приятелства, коментиране, ревюта и т.н.

Чудя се в таблицата потребител дали да слагам само основните неща (ид, име, имейл) или да слагам и друга информация относно кои са му приятелите, кои ревюта е писал, колко пъти е харесал различни неща, колко пъти е писал ревю?
Или тези неща да трупам в отделни таблици (статс примерно и акшънс) и само да ги reference-вам?

Ами събитията от сорта на:
Пешо и киро са приятели
Пешо пише ревю на нещо си
Пешо следва еди кой си
Продукт някакъв се предлага някъде си

тези трябва ли да бъдат записвани в таблица и после ако някой ги хареса или коментира, тези лайкове и коментари да се добавят към таблицата?
Американски форум: питаш нещо и ти отговарят.

Руски форум: питаш нещо и теб те питат.

Български форум:питаш нещо и всички ти обясняват колко си тъп.
0

#2
Потребителят е неактивен   nanalai 

  • Преглед на блога
  • Група: Потребители
  • Мнения: 231
  • Регистриран: 17-August 13
  • Репутация: 77
  • Пол:Мъж
Слагай всичко. Прост пример със Скайп - цялата ти хронология е една таблица, където е записано всичко, пол абоната, дата и час, вид на разговора, получател, инициатор на разговора (чата). За всяко едно съобщение се създава нов запис в таблицата , която е с над 20 колонии (по памет).
0

#3
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2914
  • Регистриран: 06-April 03
  • Репутация: 412
  • Пол:Мъж
  • Град:София
Ко? Не!

Хубаво е да има нормализация на данните, но напоследък не съм виждал много такива бази - дали от криворазбрани програмисти, или с цел да се намалят JOIN-овете в селектите - причини много.


/Оффтопик
На скайпа базата има 18 таблици, като чатовете(като информация за чата) и съобщенията са в различни таблици.
0

#4
Потребителят е неактивен   fluti 

  • Група: Потребители
  • Мнения: 6025
  • Регистриран: 26-March 04
  • Репутация: 2371

Преглед на мнениеnanalai, на 23.10.13 - 09:43, каза:

която е с над 20 колонии (по памет).

Ба*ти колонизаторите! :D

Трябва да попрочетеш за нормализация на бази данни, например: http://databases.abo...rmalization.htm

Мнението беше редактирано от fluti: 04.11.13 - 14:29

Light travels faster than sound. This is why some people appear bright until you hear them speak.
0

#5
Потребителят е неактивен   nikb 

  • Група: Потребители
  • Мнения: 2947
  • Регистриран: 12-March 05
  • Репутация: 192

Преглед на мнениеsharo, на 23.10.13 - 11:18, каза:

/Оффтопик
На скайпа базата има 18 таблици, като чатовете(като информация за чата) и съобщенията са в различни таблици.

Това не е офтопик - много хубав отрицателен пример е организацията на БД на скайпа.
Дори и без да обсъждаме липсата на всякакъв контрол на достъпа до данните.
0

#6
Потребителят е неактивен   Stefany1993 

  • Група: Потребители
  • Мнения: 525
  • Регистриран: 23-March 10
  • Репутация: 38
  • Пол:Жена
  • Град:Ловеч
  • Интереси:Програмиране, книги...
Значи референсваш само когато има опасност данните които ще съхраняваш в дадена колона да се дубликират. Всяка база данни в чийто таблици има дубликирано съдържание говори за скапан програмист.

Пример:

Имаш таблица на даден генерал да кажем Кромуел. Искаш да запишеш в кои битки е участвал и кои е победил/загубил

Table cromwell
cromwell_id cromwell_battle cromwell_result

1              Drogegha           Victory
2              Naseby              Victory

Както виждаш колоната victory има дубликирано съдържание и това не трябва да се допуска. За това сега трябва да се направи втора таблица battles_result и да се даде foreign key на таблицата cromwell

Също така, винаги давай най - малки възможни стойности на колоните когато им декларираш data type. Например ако имаш колона user_firstname няма как за знаеш колко букви ще има името на бъдещия ти визитор, но ако сложиш text ще е тъпо защото на никой името не е 60,000 букви.

Мнението беше редактирано от Stefany1993: 23.11.13 - 22:20

0

#7
Потребителят е неактивен   Stefany1993 

  • Група: Потребители
  • Мнения: 525
  • Регистриран: 23-March 10
  • Репутация: 38
  • Пол:Жена
  • Град:Ловеч
  • Интереси:Програмиране, книги...
Забравих да добавя че в таблицата cromwell нямаш нужда от cromwell_id тъй като cromwell_battle колоната винаги ще има уникално име. Даже битката да се води пак на същото място тя ще се казва примерно Втората битка при Несби. Но това няма да спре Кромуел пак да начупи кофата на Чарлз, хаха.

Много ме дразни в Codeigniter как проклетия фрейм те принуждава всяка таблица да има auto_increment ID.

Мнението беше редактирано от Stefany1993: 23.11.13 - 22:27

0

#8
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2914
  • Регистриран: 06-April 03
  • Репутация: 412
  • Пол:Мъж
  • Град:София
Tрябва да му кажеш изрично че cromwell_battle е uniqe, и въпреки това индексирането по стринг е по-бавен от този с auto increment.
1

#9
Потребителят е неактивен   kirov 

  • Група: Потребители
  • Мнения: 238
  • Регистриран: 02-August 03
  • Репутация: 51
  • Пол:Мъж
  • Град:Burgas

Цитат

Всяка база данни в чийто таблици има дубликирано съдържание говори за скапан програмист.


Еййй невероятно определение. :emote_focus:

Базата е добре да е нормализирана, но е важно да познаваш данните вътре и за какво ще ги ползваш.

При таблици с по 1-2-3 милиона реда и сложни и комплексни заявки често се избира да има redundant data за сметка на по-големия performance.

Мнението беше редактирано от kirov: 14.12.13 - 16:04

0

#10
Потребителят е неактивен   mipse 

  • Група: Потребители
  • Мнения: 1729
  • Регистриран: 17-March 04
  • Репутация: 2577
//off
"Ама и вие едни такива въпроси задавате..." - казала базата данни и увиснала.
Spoiler


свържете сe с RIT, те са по-добрите, не с Жорката

Абонамент и разпространение на печатни издания

Застраховайте се навреме
0

#11
Потребителят е неактивен   Stefany1993 

  • Група: Потребители
  • Мнения: 525
  • Регистриран: 23-March 10
  • Репутация: 38
  • Пол:Жена
  • Град:Ловеч
  • Интереси:Програмиране, книги...

Преглед на мнениеkirov, на 14.12.13 - 16:03, каза:

Еййй невероятно определение. :emote_focus:

Базата е добре да е нормализирана, но е важно да познаваш данните вътре и за какво ще ги ползваш.

При таблици с по 1-2-3 милиона реда и сложни и комплексни заявки често се избира да има redundant data за сметка на по-големия performance.


Не говоря за performance. Представи си че Пешо си купува сандали от твоя сайт и му складираш адреса постоянно в полето user_address като текст вместо за го референтваш към друга таблица. Примерно той живее на улица "Петър Христов 32" и ти имаш 120 полета с тази информация и да кажем че се премести да живее на улица "Христо Петров 23" ето ти базата данни пълна с ненужна информация и върви променяй адреса ръчно на толкова полета и ако не го направиш следващия път като си поръча сандали ще дойдат на грешен адрес. За това когато ще ползваш една и съща информация за базата данни, прави си нова таблица и готово.

Но ако твойте таблици са такива, тогава пак ми прочети цитирания пост и ще разбереш мнението ми за теб :D

Мнението беше редактирано от Stefany1993: 24.12.13 - 00:53

0

#12
Потребителят е неактивен   nikb 

  • Група: Потребители
  • Мнения: 2947
  • Регистриран: 12-March 05
  • Репутация: 192

Преглед на мнениеStefany1993, на 24.12.13 - 00:52, каза:

Не говоря за performance. Представи си ...:D

Stefany, успокой се, направи една баница за Бъдни вечер, почини си. Посрещни весело Коледа и Нова година.
Има време, ще научиш базите данни. Животът е доста по-сложен. Примерът ти не е подходящ, а и бъркаш полета със записи.
Бъди здрава!
0

#13
Потребителят е неактивен   fluti 

  • Група: Потребители
  • Мнения: 6025
  • Регистриран: 26-March 04
  • Репутация: 2371

Преглед на мнениеStefany1993, на 23.11.13 - 22:18, каза:

Всяка база данни в чийто таблици има дубликирано съдържание говори за скапан програмист.

Всеки, който твърди подобно нещо толкова категорично, няма и един ден реален опит като програмист с реални бази данни. Принципите са хубаво нещо, но в реални ситуации, нерядко се налага да се правят компромиси в името на други цели. Защото клиентът слабо го интересува колко гениално ти е нормализирана базата данни, когато програмата му се влачи.

Мнението беше редактирано от fluti: 27.12.13 - 00:41

Light travels faster than sound. This is why some people appear bright until you hear them speak.
0

#14
Потребителят е неактивен   nikb 

  • Група: Потребители
  • Мнения: 2947
  • Регистриран: 12-March 05
  • Репутация: 192

Преглед на мнениеfluti, на 27.12.13 - 00:40, каза:

Всеки, който твърди подобно нещо толкова категорично, няма и един ден реален опит като програмист с реални бази данни. Принципите са хубаво нещо, но в реални ситуации, нерядко се налага да се правят компромиси в името на други цели. Защото клиентът слабо го интересува колко гениално ти е нормализирана базата данни, когато програмата му се влачи.

Тъй като тук повечето хора с малко опит, ще коментирам това твърдение, за да не създаваме погрешни нагласи:
"нерядко" трябва да се замени с "рядко".
Ненормализирани бази данни се ползва наистина, но много, много рядко.
и точно това твърдение на стефи е вярно - ненормализираните данни говорят за некадърен програмист.
Предлагам, за пример наистина да видите базата данни sqlite на skype - в началото не можах да повярвам, че е така некадърно проектирана.
В съвсем специфични ситуации някакво дублиране на съдържание може да има смисъл, но обикновено при проектирането стремежът е базата данни да е напълно нормализирана.
1

#15
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2914
  • Регистриран: 06-April 03
  • Репутация: 412
  • Пол:Мъж
  • Град:София
Ебаси как задраскахте с два поста, цял един немалък клас бази данни.
0

#16
Потребителят е неактивен   Stefany1993 

  • Група: Потребители
  • Мнения: 525
  • Регистриран: 23-March 10
  • Репутация: 38
  • Пол:Жена
  • Град:Ловеч
  • Интереси:Програмиране, книги...

Преглед на мнениеnikb, на 27.12.13 - 09:53, каза:

Тъй като тук повечето хора с малко опит, ще коментирам това твърдение, за да не създаваме погрешни нагласи:
"нерядко" трябва да се замени с "рядко".
Ненормализирани бази данни се ползва наистина, но много, много рядко.
и точно това твърдение на стефи е вярно - ненормализираните данни говорят за некадърен програмист.
Предлагам, за пример наистина да видите базата данни sqlite на skype - в началото не можах да повярвам, че е така некадърно проектирана.
В съвсем специфични ситуации някакво дублиране на съдържание може да има смисъл, но обикновено при проектирането стремежът е базата данни да е напълно нормализирана.


Skype БД e на SQLite? Сигрно се шегуваш.

Иначе много точно, при дублирано съдържание в БД много се забавя действието на целия сайт, това е само един от минусите...
0

#17
Потребителят е неактивен   sharo 

  • Група: Потребители
  • Мнения: 2914
  • Регистриран: 06-April 03
  • Репутация: 412
  • Пол:Мъж
  • Град:София
Новите версии (тези с main.db) са на sqlite. За тИлИфоните - също. Не виждам какво те учудва.
0

Споделете тази тема чрез:


Страница 1 от 1
  • Вие не можете да започнете нова тема
  • Вие не може да отговаряте на тази тема

1 потребители четат тази тема
0 регистрирани потребители, 1 гости и 0 анонимни потребители


Data.BG e форум за дискусии. Data.BG не носи отговорност за съдържанието и достоверността на публикуваните в дискусиите материали.

Никаква част от съдържанието на тази страница не може да бъде репродуцирана, записвана или предавана под каквато и да е форма или по какъвто и да е повод без писменото съгласие на Data.BG.

Close  Member Login