sql >> Database >  >> RDS >> PostgreSQL

Nadelen van een tabel met te veel kolommen

Er zijn een paar dingen waar u rekening mee moet houden:

  • Verandert de lijst met kenmerken aanzienlijk in de loop van de tijd
  • Vereist de lijst met attributen aangepaste gebruikersattributen
  • Zijn er verschillende attributen voor verschillende scholen (d.w.z. veel kenmerken zijn alleen van toepassing op één of enkele scholen)?

Als een van deze waar is, kunt u denken aan een benadering van een property store zoals EAV, hstore, json velden, xml-velden, enz. .

Als dat niet het geval is - als u een vrij statische lijst met eigenschappen hebt waarvan de meeste logisch zijn voor de meeste rijen - dan is er niet echt een probleem om ze als 60 afzonderlijke kolommen te hebben. Het zal gemakkelijker zijn om indexen toe te voegen voor vaak gezochte sets van attributen, inclusief gedeeltelijke en samengestelde indexen, enz., en zoekopdrachten - vooral die voor veel verschillende attributen - zullen veel zijn sneller.

Zie ook:Database-ontwerp - moet ik 30 kolommen gebruiken of 1 kolom met alle gegevens in de vorm van JSON/XML ?

Er is ook een compromisoptie voor u beschikbaar:een hoofdtabel voor de belangrijkste details die u veel opzoekt, plus zijtabellen voor logische groeperingen van attributen. Zeg:

yearly_summary (
    yearly_summary_id serial primary key,
    school_id integer,
    total_students integer,
    ...
) 

plus

yearly_student_stats(
    yearly_summary_id integer primary key references yearly_summary(yearly_summy_id) on delete cascade,
    ...
)

etc. De integer primary key dat is ook een foreign key betekent dat je een afgedwongen 1:1 (optioneel) relatie hebt met de andere tabel. Deze aanpak kan handig zijn als je een paar logische groeperingen van attributen hebt die je kunt clusteren in bijtafels.

Het zou me ook verbazen als een beetje meer nadenken geen dingen zou onthullen die doen zin om te normaliseren. Heb je year7_blah , year8_blah , year9_blah enz kolommen? Zo ja:geweldige kandidaat voor normalisatie.



  1. Voorvertoning van documenten in Microsoft Access-formulier

  2. Waarom werkt dit soort in Solr niet?

  3. Relatiekenmerken vertalen van ER-diagram naar SQL

  4. MySQL selecteren string met speciale tekens