2013-11-25 36 views
6

Tôi phải chuyển đổi mã tạo cơ sở dữ liệu trong Postgres sang SQLite. Tôi bị kẹt vì SQLite không cho phép tạo ra enums hoặc tạo các loại. Tôi đang tìm cách giải quyết vấn đề này.Tạo ENUM và các loại trong SQLite

Ví dụ, hãy tưởng tượng chúng ta có trong Postgres:

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 , 
... 
); 

Các "..." đại diện cho các hàng khác. Làm thế nào để dịch nó sang SQLite? Làm thế nào để tạo ra một loại ENUM, mà có thể được sử dụng vào một bảng VÀ thành một loại khác? Bên cạnh đó làm thế nào để mô phỏng này tạo ra loại (mà cũng nên có thể sử dụng vào một bảng và một loại)?

+1

Sử dụng đơn giản 'văn bản' cột. –

Trả lời

10

SQLite không hỗ trợ định nghĩa các kiểu dữ liệu. Thật vậy, SQLite thậm chí không thực thi kiểu dữ liệu cho các cột.

Nếu bạn thực sự cần phải hạn chế giá trị, tôi khuyên bạn nên sử dụng FOREIGN KEY như thế này:

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), 
    ... 
); 
Các vấn đề liên quan