Citat:
Ursprungligen postat av SiKth
Tjänster kommer bli fler eller färre, värdet i en tjänstkolumn kommer vara en kommentar till tjänsten för den användaren. Och som sagt namnet på kolumnen är namnet på tjänsten. Det kanske blir 30 kolumner tillslut.
Just därför bör du normalisera tabellen, dess struktur bör inte förändras pga att datat gör det.
Se det som att kolumnerna i user-tabellen definierar vem en användare
är, dvs hans egenskaper, inte vad han
har. Han
är inte en eller 30 tjänster; tjänst X eller Y är inte någon egenskap hos själva användaren. Han
har däremot en eller 30 tjänster och de bör därför ligga i en separat tabell.
Kommentaren kan du då flytta till user_service-tabellen:
Tabell user_service (
UserID, ServiceID, Kommentar)
Din tabell "sj_tjanster" motsvaras nog av min tabell "service".
Att normalisera gör det dessutom plötsligt väldigt lätt att ta reda på vilka användare som har tjänst X:
SELECT u.*
FROM sj_users u
INNER JOIN user_service us ON u.UserID = us.UserID
WHERE us.ServiceID = 15; -- eller joina in service-tabellen också, och ha tjänstens namn som sökkriterium.
Eller hur många tjänster varje användare har:
SELECT u.Username, COUNT(us.*) AS AntalTjänster
FROM sj_users u
INNER JOIN user_service us on u.UserID = us.UserID
GROUP BY u.Username