sql >> Databasteknik >  >> RDS >> Oracle

Uppdatera fält automatiskt i databasen

informationen i kolumnen TMP_PONYLIST är redundant (det finns någon annanstans). Du kommer att hamna i alla möjliga problem för att underhålla den (ingen lösning fungerar korrekt i en miljö med flera användare om det inte finns någon form av låsmekanism).

I en normaliserad modell skulle du helt enkelt ta bort den här kolumnen från den fysiska modellen. Om du behöver informationen kan du använda en vy, till exempel med Oracle 11gR2:

CREATE OR REPLACE VIEW rider_v AS
SELECT rider_id, /*...,*/
       (SELECT listagg(p.pony_name, ';') WITHIN GROUP (ORDER BY p.pony_name)
          FROM t_pony p
          JOIN t_rider_pony rp ON (p.pony_id = rp.pony_id)
         WHERE rp.rider_id = r.rider_id) tmp_ponylist
  FROM t_rider r;

Se denna SO till exempel av strängaggregation före 11gR2.



  1. mySQL:Gå med i tre bord – hur?

  2. COPY med dynamiskt filnamn

  3. Hur make_timestamptz() fungerar i PostgreSQL

  4. 'en-till-många' relationsintegritetsfråga för tidsintervall