sql >> Databasteknik >  >> RDS >> Mysql

Lagrar en array av okänd längd

Om du hamnar i en situation där du börjar ha column1 , column2 på bordet - chansen är stor att din design blir felaktig, och du bör istället skapa en separat tabell - där varje columnX får en egen rad. Det är (nästan) alltid bättre att ha en separat tabell om du märker att du har flera upprepade kolumner på samma tabell.

På så sätt undviker du att lagra kommaseparerade värden i kolumner, du slipper bryta din kod/frågor om du plötsligt måste införa ett annat värde column{X+1} - och istället kan ha så många eller så få ingångsvärden som du behöver.

För dig skulle det vara ungefär som en ny tabell som heter land_owner_input , där du har värdet (som du skulle lägga i columnX ), och en referens till raden i land_owner som värdet tillhör.

Typiskt designmönster skulle vara något sånt här.

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

Tänk på att ditt land_owner_id i den nya tabellen bör vara av exakt samma typ och storlek som det ID som det refererar till.

Du kan också skapa en främmande nyckel-begränsning mellan land_owner_id och ID för land_owner tabell för att säkerställa dataintegritet.

När du har din nya tabell kan du fråga dem tillsammans genom att använda en LEFT JOIN (eller en vanlig JOIN om du bara vill returnera rader om den har inmatningsvärden).

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


  1. django.db.utils.ProgrammingError:relation finns redan

  2. Salesforce SOQL från Windows PowerShell

  3. REGEXP_INSTR() Funktion i Oracle

  4. ROWIDTONCHAR() Funktion i Oracle