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

Автоматично генериране на композитен ключ в SQLite

Нормалните таблици на Sqlite са B*-дървета, които използват 64-битово цяло число като ключ. Това се нарича rowid. При вмъкване на ред, ако стойността не е изрично дадена за това, се генерира такава. INTEGER PRIMARY KEY колона действа като псевдоним за този rowid. AUTOINCREMENT ключова дума, която може да се използва само за посочения INTEGER PRIMARY KEY колоната, противно на името, просто променя начина, по който се изчислява споменатият rowid - ако пропуснете стойност, ще бъде създадена такава, независимо дали тази ключова дума присъства или не, защото това наистина е rowid и трябва да има номер. Подробности тук. (rowid стойностите обикновено се генерират в нарастващ, но не непременно последователен ред и не трябва да се третират като номер на ред или нещо подобно, между другото).

Всеки първичен ключ, различен от единичен INTEGER колоната се третира като уникален индекс, докато rowid остава истинският първичен ключ (освен ако не е таблица WITHOUT ROWID) и не се генерира автоматично. Така че, не, не можете (лесно) да правите това, което искате.

Вероятно бих разработил дизайн на база данни, където имате таблица с магазини, таблица с продукти, всеки със свои собствени идентификатори и таблица за свързване, която установява връзка много към много между двете. Това запазва идентификатора на продукта един и същ между магазините, което вероятно ще бъде по-малко объркващо за хората – не бих очаквал един и същи артикул да има различен артикул в два различни магазина от една и съща верига, например.

Нещо като:

CREATE TABLE stores(store_id INTEGER PRIMARY KEY
                  , address TEXT
                    -- etc
                   );
CREATE TABLE product(prod_id INTEGER PRIMARY KEY
                   , name TEXT
                     -- etc
                   );
CREATE TABLE inventory(store_id INTEGER REFERENCES stores(store_id)
                     , prod_id INTEGER REFERENCES product(prod_id)
                     , PRIMARY KEY(store_id, prod_id)) WITHOUT ROWID;



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLite върна код за грешка 14

  2. Как работи SQLite Rtrim().

  3. Управление на данни с Python, SQLite и SQLAlchemy

  4. Как работи функцията Date() в SQLite

  5. Android - SQLite - ИЗБЕРЕТЕ МЕЖДУ Дата1 И Дата2