sql >> Databasteknik >  >> RDS >> Mysql

Relationell databas designa flera användartyper

Ditt fall ser ut som en instans av klass/underklass.

Det finns två klassiska sätt att designa SQL-tabeller för att hantera underklasser. Var och en har fördelar och nackdelar.

Ett sätt kallas "Single Table Arv". I denna design finns det bara ett bord för alla typer av användare. Om en given kolumn inte hör till en given rad lämnas skärningspunkten NULL. En kolumn kan läggas till för att indikera användartypen.

Ett annat sätt kallas "Klassbordsarv". Detta är ungefär som svaret Nanego gav, med några mindre ändringar. Det finns en tabell för användare, med alla vanliga data, och ett id-fält. Det finns en tabell för varje underklass, med data som hänför sig till den underklassen. Id-fältet ställs ofta upp som en kopia av id-fältet i den matchande raden bak i användartabellen. På så sätt kan underklassnyckeln göra dubbelfunktion och fungera som både en primärnyckel och som en främmande nyckel som refererar till användartabellen. Denna sista teknik kallas "Delad primärnyckel". Det kräver lite programmering vid insättningstillfället, men det är väl värt det. Det upprätthåller en-till-en-karaktären av relationen, och det påskyndar de nödvändiga kopplingarna.

Du kan slå upp alla dessa tre designs som taggar i SO eller som artiklar ute på webben.



  1. MySQL kartesisk produkt mellan två SELECT-satser

  2. Hur man söker och ersätter alla instanser av en sträng i en databas?

  3. MYSQL-fråga/datum äldre än 1 vecka sedan (alla datumtider i UTC)

  4. Byta från MySQL till PostgreSQL - tips, tricks och gotchas?