sql >> Database teknologi >  >> RDS >> Oracle

DB Design til at gemme brugerdefinerede felter til en tabel

Dette er et almindeligt problem, og der er ingen perfekt løsning. Et par løsninger:

1. Definer X-felter af typen varchar2, Y-felter med typenummer og Z-felter af typedato. Det kommer ud som potentielt 3 gange antallet af tilpassede felter, men du vil aldrig have nogen konverteringsproblemer længere.

Dit eksempel ville komme sådan ud:

Id Name field_char1  field2_char2 field_char3 ... field_num1 field_num2 ...
1  lap1 lappy        lappy        lappy       ... 12         13     
2  lap2 lappy2       lappy2       lapp2       ... 13         12

I dit eksempel har du det samme antal numeriske værdier og tegnværdier på begge rækker, men det behøver ikke at være på denne måde:den tredje række kunne f.eks. ikke have noget numerisk felt.

2. Definer X-felter af typen varchar2 og anvend en bijektiv funktion til at gemme nummer eller datofelt (dato kunne f.eks. gemmes som YYYYMMDDHH24miss ). Du skal også bruge et ekstra felt, der definerer konteksten for rækken. Du skal anvende to_number eller to_char fungerer kun, når rækkerne er af den gode type.

Dit eksempel:

Id Name context field1  field2 field3  field4 field5
1  lap1 type A  lappy   lappy  12      13     lappy
2  lap2 type B  lappy2  13     lappy2  lapp2  12

Du kan forespørge i tabellen ved hjælp af DECODE eller CASE:

SELECT * 
  FROM laptop
 WHERE CASE WHEN context = 'TYPE A' THEN to_number(field3) END = 12

Det andet design er det, der blandt andet bruges i Oracle Financials ERP. Konteksten giver dig mulighed for at definere CHECK-begrænsninger med dette design (for eksempel CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0 ) for at sikre integritet.



  1. Hvad er logisk OG Operator i SQL Server - SQL Server / TSQL Tutorial Del 120

  2. Hvordan forespørger man efter XML-værdier og attributter fra tabel i SQL Server?

  3. Konvertering af cifre/tal i ord til INR-valuta (indiske rupier) i Oracle PL/SQL

  4. Har du virkelig brug for en db forbindelsespool til enhjørningskinner?