sql >> Database >  >> RDS >> Mysql

Relationeel databaseontwerp meerdere gebruikerstypen

Uw zaak ziet eruit als een instantie van klasse/subklasse.

Er zijn twee klassieke manieren om SQL-tabellen te ontwerpen om met subklassen om te gaan. Elk heeft zijn voor- en nadelen.

Een manier wordt "Single Table Inheritance" genoemd. In dit ontwerp is er slechts één tafel voor alle soorten gebruikers. Als een bepaalde kolom geen betrekking heeft op een bepaalde rij, wordt het snijpunt NULL gelaten. Er kan een kolom worden toegevoegd om het gebruikerstype aan te geven.

Een andere manier wordt "Class Table Inheritance" genoemd. Dit lijkt veel op het antwoord dat Nanego gaf, met een paar kleine wijzigingen. Er is één tabel voor gebruikers, met alle algemene gegevens, en een id-veld. Er is één tabel voor elke subklasse, met gegevens die betrekking hebben op die subklasse. Het id-veld wordt vaak ingesteld als een kopie van het id-veld in de overeenkomende rij in de gebruikerstabel. Op deze manier kan de subklassesleutel dubbel werk doen, zowel als primaire sleutel als als externe sleutel die verwijst naar de gebruikerstabel. Deze laatste techniek wordt "Shared Primary Key" genoemd. Het vereist een beetje programmeren tijdens het invoegen, maar het is de moeite waard. Het versterkt het één-op-één karakter van de relatie, en het versnelt de noodzakelijke joins.

Je kunt alle drie deze ontwerpen opzoeken als tags in SO of als artikelen op internet.



  1. Log DBMS_OUTPUT.Put_Line-uitvoer in tabel in Oracle met DBMS_OUTPUT.Get_Lines

  2. Waarom is 1899-12-30 de nuldatum in Access / SQL Server in plaats van 31-12?

  3. Hoe een lokale MySQL-database te implementeren in Heroku

  4. Wat is het doel van een Android-projectiekaart in een contentprovider?