Составной первичный ключ (Sqlite.Swift)

Как я могу создать таблицу с составным первичным ключом с помощью этой библиотеки. Например:

CREATE TABLE something (
  column1, 
  column2, 
  column3, 
  PRIMARY KEY (column1, column2)
);

Единственный пример, который я вижу в документации, — это первичный ключ в одном столбце:

try db.run(users.create { t in     
    t.column(id, primaryKey: true)
    t.column(email, unique: true)  
    t.column(name)                 
}) 

Я пробовал следующее, но терпит неудачу с ошибкой (... таблица "" имеет более одного первичного ключа):

 try db.run(tblTsMosStaged.create { t in
                        t.column(colTsMosStagedEventId, primaryKey: true)
                        t.column(colTsMosStagedEventInstance, primaryKey: true)
                        t.column(colTsMosStagedTaxId, primaryKey: true)
                        t.column(colTsMosStagedRankId)
...

Или это возможно только через Выполнение произвольного SQL


person Paul    schedule 29.11.2017    source источник


Ответы (1)


В документации SQLite.swift говорится :

Ограничения таблицы

Дополнительные ограничения могут быть предоставлены за пределами одного столбца с помощью следующих функций.

  • primaryKey добавляет в таблицу ограничение PRIMARY KEY. В отличие от приведенного выше ограничения столбца, оно поддерживает все типы SQLite, возрастающий и убывающий порядок, а также составные (несколько столбцов) ключи.

    t.primaryKey(email.asc, name)
    // PRIMARY KEY("email" ASC, "name")
    
 try db.run(tblTsMosStaged.create { t in
                        t.column(colTsMosStagedEventId)
                        t.column(colTsMosStagedEventInstance)
                        t.column(colTsMosStagedTaxId)
                        t.column(colTsMosStagedRankId)
//ADD this line
                        t.primaryKey(colTsMosStagedEventId, colTsMosStagedEventInstance, colTsMosStagedTaxId)
person Gwendal Roué    schedule 29.11.2017