sql >> Database >  >> RDS >> Oracle

DB Design om aangepaste velden voor een tabel op te slaan

Dit is een veelvoorkomend probleem en er is geen perfecte oplossing. Een paar oplossingen:

1. Definieer X velden van het type varchar2, Y velden van het type nummer en Z velden van het type datum. Dat komt neer op mogelijk 3 keer het aantal aangepaste velden, maar u zult nooit meer een conversieprobleem hebben.

Uw voorbeeld zou er als volgt uit komen te zien:

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

In uw voorbeeld heeft u hetzelfde aantal numerieke waarden en tekenwaarden op beide rijen, maar het hoeft niet zo te zijn:de derde rij zou bijvoorbeeld geen numeriek veld kunnen hebben.

2. Definieer X-velden van het type varchar2 en pas een bijectieve functie toe om het nummer of het datumveld op te slaan (Datum kan bijvoorbeeld worden opgeslagen als YYYYMMDDHH24miss ). U hebt ook een extra veld nodig dat de context van de rij bepaalt. Je zou de to_number . toepassen of to_char werken alleen als de rijen van het goede type zijn.

Jouw voorbeeld:

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

U kunt de tabel opvragen met DECODE of CASE:

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

Het tweede ontwerp is het ontwerp dat (onder andere) in de Oracle Financials ERP wordt gebruikt. Met de context kunt u CHECK-beperkingen definiëren met dit ontwerp (bijvoorbeeld CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0 ) om de integriteit te waarborgen.



  1. psql:FATAL:wachtwoordverificatie mislukt voor gebruikersvensters 8

  2. Unaccent gebruiken met SearchVector en SearchQuery in Django

  3. Visual COBOL verbinden met MySQL

  4. 10 redenen waarom uw bedrijf Microsoft Access nodig heeft