Połączenie 3 kolumn foreign key

0

Witam. Mam pewien problem, naszkicuję nieco bazy

uzytkownicy
-id(AI, PRIMARY KEY)
-roles_id (INDEX)

roles
-id(AI, PRIMARY KEY)

userroles
-user_id( PRIMARY KEY,UNIQUE INDEX)
-roles_id(INDEX)

Chciałbym zrobić autoryzację uzytkownika
W 'roles' będzie nick, haslo admina
W 'uzytkownicy' będzie nick i haslo pozostałych userów
W 'userroles' będą role

Więc tak, chcę połączyć foreign key tabele user_id(userroles) z id(uzytkownicy), roles_id(userroles) z id(roles), do tej pory wszystko jest dobrze, gdy to wykonam, w tabeli usersroles zapisują się dane z obu tabel z którymi je połączylem.
Problem zaczyna się, gdy chcę do role_id(uzytkownicy) przypisać id admina z tabeli users, pokazuje się bowiem komunikat

'#1452 - Cannot add or update a child row: a foreign key constraint fails (`koszulki_baza`.`#sql-ae0_19eed37`, CONSTRAINT `#sql-ae0_19eed37_ibfk_1` FOREIGN KEY (`role_id`) REFERENCES `roles` (`id`))'
0

No to po kolei.
Na wstępie odniosę się do struktury. Jak rozumiem jedne user ma mieć możliwość przynależenia do wielu ról. Jesli tak to do userroles dodałbym pole ID (PK), a pola user_id i roles_id jako FK. Do tego założyłbym odpowiedni constraint aby była unikatowa para user_id, roles_id co zabezpieczy cię przed dodaniem zdublowanych rekordów.

Co do 'admina' .... no cóż wg mnie admin to też user więc jego hasło i nick powinny być w tabeli uzytkownicy, natomiast możesz albo na userze albo na roli dodać flagę, która będzie określać, że jest to "ADMIN". Dodanie takiego pola w roli pozwoli Ci łatwiej "zarządzać" wieloma administratorami. No ale to już jak tam chcesz.

0

Super, a mógłbyś nieco rozwinąć jak tą flagę dodać i jakie constranit nałożyć?

Jeszcze jedno, w jaki sposób nałożyć autouzupełnianie się tabeli userroles, wraz z dodawaniem nowych userów ?

0

skoro jest tabela w której jest informacja dot. usera i jego roli to po co tworzyć dodatkowe rzeczy (flagi) do identyfikacji admina. Przecież identyfikacja admina jest prosta przy takiej strukturze. Jak będę to chciał sprawdzić to sprawdzam to właśnie w tabeli [userroles] czy w tabeli user roles jest rekord np. User_id = 1 i roles_id =1 (gdzie oczywiście rola o ID =1 musi być rolą ADMIN)

1 użytkowników online, w tym zalogowanych: 0, gości: 1