Oracle
 sql >> Baza danych >  >> RDS >> Oracle

DB Design do przechowywania niestandardowych pól dla tabeli

To częsty problem i nie ma idealnego rozwiązania. Kilka rozwiązań:

1. Zdefiniuj X pól typu varchar2, Y pól typu numer i Z pól typu data. Oznacza to potencjalnie trzykrotność liczby pól niestandardowych, ale już nigdy nie będziesz mieć problemu z konwersją.

Twój przykład wygląda tak:

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

W twoim przykładzie masz taką samą liczbę wartości numerycznych i znakowych w obu wierszach, ale nie musi tak być:na przykład trzeci wiersz może nie mieć pola liczbowego.

2. Zdefiniuj X pól typu varchar2 i zastosuj funkcję bijective do pola numeru magazynu lub daty (na przykład Data może być przechowywana jako YYYYMMDDHH24miss ). Potrzebne będzie również dodatkowe pole, które określi kontekst wiersza. Powinieneś zastosować to_number lub to_char działają tylko wtedy, gdy wiersze są dobrego typu.

Twój przykład:

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

Możesz zapytać o tabelę za pomocą DECODE lub CASE:

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

Drugi projekt to ten, który został wykorzystany w Oracle Financials ERP (m.in.). Kontekst umożliwia zdefiniowanie ograniczeń CHECK z tym projektem (na przykład CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0 ) w celu zapewnienia integralności.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jaka jest różnica między widokami a widokami zmaterializowanymi w Oracle?

  2. Używanie procedury składowanej Oracle PL/SQL do przyznawania praw do tabel innego użytkownika

  3. Jak uruchomić Opatch w formie nieinteraktywnej

  4. Błąd ORA-12638 w Oracle Database 11g

  5. usuwanie milisekund z pola Oracle tmstmp