2013-11-25 11 views
6

Muszę konwertować kod tworząc bazę danych w PostgreSQL do SQLite. Utknąłem, ponieważ SQLite nie pozwala na wyliczanie lub tworzenie typów. Szukam sposobu na obejście tego problemu.Tworzenie ENUM i typów w SQLite

Na przykład wyobrazić mamy w PostgreSQL:

CREATE TYPE AckStatusEnum AS ENUM (
'ACKNOWLEDGED','NOT_ACKNOWLEDGED','ERROR_RECEIVED','NOT_SENT' 
); 

CREATE TABLE ACK_EVENT(
... 
    ACK_STATUS AckStatusEnum, 
... 
); 

CREATE TYPE aggr_type AS (
... 
    severity alertseverityenum , 
... 
); 

"..." oznacza inne wiersze. Jak przetłumaczyć to na SQLite? Jak utworzyć typ ENUM, który może być użyty w tabeli I na inny typ? Poza tym, jak symulować tworzenie tego typu (które powinno również być użyteczne w tabeli i typie)?

+1

użyć prostego 'text' kolumny. –

Odpowiedz

10

SQLite nie obsługuje definiowania typów danych. Rzeczywiście, SQLite nawet nie wymusza typowania danych w kolumnach.

Jeśli naprawdę potrzebujesz do wartości dopuszczalnych, polecam korzystania FOREIGN KEY jak to:

CREATE TABLE AckStatusEnum (id INTEGER PRIMARY KEY AUTOINCREMENT, AckStatusEnum TEXT); 
INSERT INTO AckStatusEnum(AckStatusEnum) VALUES('ACKNOWLEDGED'), ('NOT_ACKNOWLEDGED'), ('ERROR_RECEIVED'), ('NOT_SENT'); 

CREATE TABLE ACK_EVENT(
    ... 
    ACK_STATUS REFERENCES AckStatusEnum(id), 
    ... 
);