koxu1996
11.05.2013, 16:38:03
Witam. Mam taki dylemat na temat rozkładu tabel w mysql, a mianowcie:
1. Na przykład w komentarzach,logach zapisuje id użytkownika (bo gdybym zapisywał nazwę i ktoś by zmienił to wszystko w bazie trzeba było by poprawiać) i i na stronce żeby wyświetlić nazwe to trzeba za kazdym razem pobierac po id. Czy bardziej optymalne było by zapisywanie nazwy (otrzymywało by się w jednym zapytaniu) przy czym zablokować możliwość zmiany nicku?
2. Jeżeli już nazwa by była pobierana po id, to nie lepiej było by rozdzielić tabele użytkowników na podstawowe informacje oraz drugą w której by były zawarte informacje takie jak profil itd ? Chodzi żeby przy każdym pobieraniu nazwy nie pobierać dużo niepotrzebnych danych.
Co o tym sądzicie?
jaslanin
11.05.2013, 18:30:21
1. domyślnie powinno być po id + constraints ( chociaż to też ma negatywny wpływ na wydajność ), ewentualnie jak tak bardzo Ci zależy na wydajności to można w tabelach w których nie ma nazwy dodać osobną kolumne z nazwą która była by kopią tego co jest w profilu ( co prawda wtedy tabela nie jest znormalizowana, ale coś za coś )
2. problemem jest bardziej szybkie znalezienie wiersza, niż to czy wiersz ma mało czy dużo danych, zamiast SELECT * możesz przecież wypisać tylko kolumny których potrzebujesz
kipero
11.05.2013, 22:29:07
Poczytaj sobie o łączeniu tabel - słowo klucz: JOIN. Rozdziela się tabele, tak aby w każdej trzymać logicznie identyczne dane i właśnie dzięki złączeniom można wybierać dane z kilku tabel jednocześnie.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę
kliknij tutaj.