sql >> Database >  >> RDS >> Mysql

Een array met onbekende lengte opslaan

Als u zich in een situatie bevindt waarin u column1 . begint te krijgen , column2 op de tafel - de kans is groot dat uw ontwerp gebrekkig wordt, en u moet in plaats daarvan een aparte tabel maken - waar elke columnX krijgt een eigen rij. Het is (bijna) altijd beter om een ​​aparte tabel te hebben als je merkt dat je meerdere herhalende kolommen in dezelfde tabel hebt.

Op die manier vermijdt u het opslaan van door komma's gescheiden waarden in kolommen, vermijdt u het breken van uw code/query's als u plotseling een andere waarde moet invoeren column{X+1} - en kan in plaats daarvan zo veel of zo weinig invoerwaarden hebben als nodig is.

Voor jou zou dat zoiets zijn als een nieuwe tabel genaamd land_owner_input , waar je de waarde hebt (die je zou plaatsen in columnX ), en een verwijzing naar de rij in land_owner waar de waarde bij hoort.

Een typisch ontwerppatroon zou zoiets zijn als dit.

CREATE TABLE land_owner_input (
    land_owner_input_id INT(11) AUTO_INCREMENT
    land_owner_id INT(11), 
    land_owner_input_value VARCHAR(MAX)
);

Houd er rekening mee dat uw land_owner_id in de nieuwe tabel moet van exact hetzelfde type en dezelfde grootte zijn als de ID waarnaar wordt verwezen.

U kunt ook een externe sleutelbeperking maken tussen de land_owner_id en de ID van de land_owner tabel om de gegevensintegriteit te waarborgen.

Zodra u uw nieuwe tabel heeft, kunt u ze samen opvragen met een LEFT JOIN (of een normale JOIN als je alleen rijen wilt retourneren als het invoerwaarden heeft).

SELECT *
FROM land_owner AS lo
LEFT JOIN land_owner_input AS loi
    ON loi.land_owner_id = lo.land_owner_id 


  1. Welke index moet ik gebruiken bij het gebruik van JOIN op PRIMARY KEY

  2. FOUT:toestemming geweigerd voor relatietabelnaam op Postgres tijdens het proberen van een SELECT als een alleen-lezen gebruiker

  3. Zoek berichtarray in door komma's gescheiden kolomwaarde

  4. BLOB/TEXT kolom 'waarde' gebruikt in sleutelspecificatie zonder sleutellengte