как реализовать многозначный атрибут в оракуле?

Я хочу сохранить больше чем один почтовый идентификатор в почтовом идентификационном столбце таблицы как многозначный атрибут. Как я могу сделать это в оракуле?

5
задан OMG Ponies 11 June 2010 в 19:36
поделиться

2 ответа

Традиционный реляционный способ сделать это - использовать дочернюю таблицу кучи:

create table emails 
    (id number
     , email_address varchar2(254)
     , constraint em_t23_fk foreign key (id)
                  references t23 (id)
                  )
/

Однако вы намекаете на вложенную таблицу:

create type email_t as object
    (email_address varchar2(254))
/

create type email_nt as table of email_t
/
alter table t23
    add emails email_nt
    nested table emails store as emails_table
/

Вот как это работает:

SQL> update t23
  2  set emails = email_nt (email_t('sam_i_am@example.com')
  3                          , email_t('green_eggs_n_ham@yahoo.co.uk'))
  4  where id = 222
  5  /

1 row updated.

SQL> select * from t23
  2  where id = 222
  3  /

        ID NAME                           DOB
---------- ------------------------------ ---------
EMAILS(EMAIL_ADDRESS)
----------------------------------------------------------------------------------
       222 Sam-I-Am                       06-AUG-02
EMAIL_NT(EMAIL_T('sam_i_am@example.com'), EMAIL_T('green_eggs_n_ham@yahoo.co.uk'))


SQL>

Edit

Решение с VARRAY в основном такое же:

SQL> alter table t23
  2      drop column emails
  3  /

Table altered.

SQL> create type email_va as varray(5) of varchar2(254)
  2  /

Type created.

SQL> alter table t23
  2      add emails email_va
  3  /

Table altered.

SQL> update t23
  2  set emails = email_va ('sam_i_am@example.com'
  3                        , 'green_eggs_n_ham@yahoo.co.uk')
  4  where id = 222
  5  /

1 row updated.

SQL> select t23.name
  2         , e.*
  3  from t23
  4       , table (t23.emails) e
  5  where t23.id = 222
  6  /

NAME                           COLUMN_VALUE
------------------------------ ---------------------------------
Sam-I-Am                       sam_i_am@example.com
Sam-I-Am                       green_eggs_n_ham@yahoo.co.uk

SQL>
3
ответ дан 14 December 2019 в 18:59
поделиться

Стандартный способ сделать это - определить вторую таблицу, в которой можно хранить по одному электронному письму в строке.

Oracle также поддерживает вложенные таблицы, поэтому один столбец атрибутов может содержать несколько значений.

2
ответ дан 14 December 2019 в 18:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: