![]() ![]() |
Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.03.2015 Ostrzeżenie: (0%)
|
Hej!
Otóż mam taki problem, a raczej kilka... Staram się stworzyć bazę na podstawie 2 tabel.
Niby wszystko ładnie pięknie, ale schody zaczynają się kiedy kombinuję z relacjami w tych 2 tabelach. Chciał bym utworzyć relację między tymi tabelami po przez 'channel'. W zasadzie, to nawet tych pól 'id' nie potrzebuje, chyba. Sam już nie wiem. Próbowałem ustawiac primary/unique keye na id i na channel w róznych konfiguracjach. Zawsze napotykam jakieś problemy, błędy... Albo nie da się ustawić relacji na channel, tylko na id. Albo nie da się dodawać danych do bazy, a relacje da się ustawić i na id i na channel. Albo jakies inne problemy, typu nie da się ustawić opcji primary key w którejś tabeli... Jednym słowem... Chcę relacji między tabelami poprzez channel. commands.id, users.id i users.channel mają być unikalne. Ktoś podrzuci jakieś konkretne, gotowe rozwiązanie na te 2 tabele? Bo już nie mam do tego siły na ten moment, no i nie chce mi się przerabiać całego sql'a od 0 żeby to ogarnąć w całości. Wersja MySQL: 5.5.41 Ten post edytował n0zz 1.03.2015, 05:33:38 |
|
|
|
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
A możesz wyjaśnić dlaczego chcesz tworzyć relację po "chanel" ?
Jakie jest logiczne powiązanie pomiędzy tymi tabelami bo nie potrafię wymyślić logicznego powiązania pomiędzy user-command i kolumnie chanel. Dla mnie chanel to jest kolumna oderwana od całości. |
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.03.2015 Ostrzeżenie: (0%)
|
Jak by to wyjaśnić...
Channel w tabeli users jest nazwą użytkownika. W sumie mogło by tam nie być w ogóle id chyba, ale bez id i ustawionego primary key na id w phpmyadminie jakieś tam komunikaty wyskakiwały. Channel w tabeli commands to kanał czatu na którym działają te określone komendy które są w bazie właśnie przypisane do tego kanału(który jest jednocześnie użytkownikiem). Także, users.channel jest jednocześnie użytkownikiem, który może kupić premium lub nie, oraz nazwą kanału(commands.channel) na którym mają być używane komendy. W zasadzie, jak tak sobie myślę to nawet nie jestem pewny po co są te relacje w ogóle. Także liczę na pomoc w stworzeniu tej prostej bazy. Jakieś wytłumaczenie co, jak i po co, albo link, do czegoś, co wyjaśni mi wszystko w prosty sposób. Ale żebym nie musiał przerabiać przykładowo książki 400 stron na temat sql'a... Bo tym może się zajmę za jakiś czas, teraz chcę doprowadzić projekt do sensownego etapu i brakuje mi sumie tylko tej bazy, w miarę zorganizowanej. Ten post edytował n0zz 1.03.2015, 14:18:30 |
|
|
|
Post
#4
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
tabele:
- users (id, name, premium) - channels (id, name) - commands (id, command, description) - channel_command (chanel_id, command_id) - Jakie komendy dla jakiego kanału - channel_user (user_id, channel_id) - Jakie komendy dla jakiego użytkownika Teraz ustalenie relacji nie jest problemem a i większe możliwości bo: - Komendy ustalasz raz - Kanały ustalasz raz - wiele użytkowników może mieć tą samą komendę - Wiele kanałów może mieć tą samą komendę Tak więc może nie jest to 2 table ale masz możliwość ustalenia bardziej logicznych relacji. |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.03.2015 Ostrzeżenie: (0%)
|
Nie rozumiem po co mają być jednocześnie te dwie tabele:
Cytat - users (id, name, premium) - channels (id, name) No i skoro tak, to te dwie również: Cytat - channel_command (chanel_id, command_id) - Jakie komendy dla jakiego kanału - channel_user (user_id, channel_id) - Jakie komendy dla jakiego użytkownika W users i channels będą dokładnie te same dane, user to jednocześnie channel... Każdy user ma dokładnie 1 channel którego nazwa jest jednocześnie nazwą tego użytkownika. Nie rozumiem po co to rozdzielać na 5 tabel, skoro wystarczyły by 2, lub 3(zakładając, że relacje stworzył bym w 3 tabeli, podobnej do tej channel_command). No i nawet jeśli bym się brał za ustawianie takich tabel, to wychodzi na to, że znów bym miał problem z tymi kluczami przy ustawianiu relacji. Może tak. Nie rozdzielając już kompletnie na to user i channel, bo to jedno i to samo... users(id, name, premium) commands(id, name, command, description) Lub: users(id, name, premium) commands(id, command, description) user_command(user_id, command_id) To by miało sens? Ten post edytował n0zz 1.03.2015, 15:15:36 |
|
|
|
Post
#6
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%)
|
Skoro jest założenie że user == channel to Twoja propozycja 2 jest dobra.
Zauważ że w takim przypadku 1 command możesz przypisać dla kilku userów. Chyyyba że 1 command ma być tylko dla jednego usera to 1-sza propozycja i PK na id oraz foreign_key po ID |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 4 Pomógł: 0 Dołączył: 1.03.2015 Ostrzeżenie: (0%)
|
Dobra, na razie zabrałem się do roboty na szybko posiadając tylko tabelę commands.
Dzisiaj już nic nie robię, bo spać trzeba lecieć. Ale sprawdzę jutro jak to będzie z tymi kluczami w końcu... Mam nadzieję, że dam ratę to ogarnąć... No i przy okazji, już wiem, że będzie w tej bazie dużo więcej tabel Przynajmniej ze 4 jeszcze. A przy dobrej organizacji, żeby się to nie mieszało to pewnie ze 2x tyle... Chyba jednak przysiądę na parę dni/tygodni do tego sql'a żeby to ogarnąć, bo nie mam nikogo od tego, a będzie potrzebnych parę rzeczy :/ W każdym razie, dzięki za rady |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 02:03 |