Oracle
 sql >> база данни >  >> RDS >> Oracle

DB Design за съхраняване на персонализирани полета за таблица

Това е често срещан проблем и няма перфектно решение. Няколко решения:

1. Дефинирайте X полета от тип varchar2, Y полета от тип номер и Z полета от тип date. Това излиза като потенциално 3 пъти повече персонализирани полета, но никога повече няма да имате проблеми с преобразуването.

Вашият пример ще излезе така:

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

Във вашия пример имате еднакъв брой числови стойности и стойности на знаци и в двата реда, но не е задължително да е така:третият ред може да няма числово поле например.

2. Дефинирайте X полета от тип varchar2 и приложете биективна функция за съхраняване на поле за номер или дата (например датата може да се съхранява като YYYYMMDDHH24miss ). Ще ви трябва и допълнително поле, което ще дефинира контекста на реда. Ще приложите to_number или to_char функционира само когато редовете са от добър тип.

Вашият пример:

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

Можете да направите запитване към таблицата, като използвате DECODE или CASE:

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

Вторият дизайн е този, използван в Oracle Financials ERP (наред с други). Контекстът ви позволява да дефинирате ограничения на CHECK с този дизайн (например CHECK (CASE WHEN context = 'TYPE A' THEN to_number(field3) > 0 ), за да гарантирате целостта.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORA-00942:таблица или изглед не съществува с Spring JDBC шаблон в Spring Boot

  2. Как да актуализирате колона TIMESTAMP до TIMESTAMP С ЧАСОВА ЗОНА в Oracle

  3. Oracle DateTime в клауза Къде?

  4. Oracle PL/SQL - Изключенията NO_DATA_FOUND лоши ли са за производителността на съхранената процедура?

  5. Справяне с грешката в Drop Column в Oracle 18c и 19c