SQLite
 sql >> Teknologi Basis Data >  >> RDS >> SQLite

Buat kunci komposit secara otomatis di SQLite

Tabel Sqlite normal adalah B*-tree yang menggunakan integer 64-bit sebagai kuncinya. Ini disebut rowid. Saat menyisipkan baris, jika nilai tidak diberikan secara eksplisit untuk ini, satu akan dihasilkan. Sebuah INTEGER PRIMARY KEY kolom bertindak sebagai alias untuk rowid ini. AUTOINCREMENT kata kunci, yang hanya dapat digunakan pada INTEGER PRIMARY KEY kolom, bertentangan dengan namanya, hanya mengubah cara menghitung rowid - jika Anda mengabaikan nilai, nilai akan dibuat apakah kata kunci itu ada atau tidak, karena itu benar-benar rowid dan harus memiliki nomor. Rincian di sini. (nilai rowid umumnya dihasilkan dalam peningkatan, tetapi tidak harus berurutan, berurutan, dan tidak boleh diperlakukan seperti nomor baris atau semacamnya, btw).

Kunci utama apa pun selain satu INTEGER kolom diperlakukan sebagai indeks unik, sedangkan rowid tetap menjadi kunci utama yang sebenarnya (Kecuali jika tabel TANPA ROWID), dan tidak dibuat secara otomatis. Jadi, tidak, Anda tidak dapat (dengan mudah) melakukan apa yang Anda inginkan.

Saya mungkin akan membuat desain database di mana Anda memiliki tabel toko, tabel produk, masing-masing dengan id mereka sendiri, dan tabel persimpangan yang menetapkan hubungan banyak-ke-banyak di antara keduanya. Hal ini membuat id produk tetap sama antar toko, yang mungkin tidak akan terlalu membingungkan orang - saya tidak berharap barang yang sama memiliki SKU yang berbeda di dua toko berbeda dari rantai yang sama, misalnya.

Sesuatu seperti:

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. Permintaan SQLite:dapatkan semua kolom dari satu baris (Android)?

  2. SQLite JSON_GROUP_ARRAY()

  3. WinDeath pada notifyDataSetChanged()

  4. Apakah praktik yang baik menggunakan ContentProvider untuk menangani operasi basis data?

  5. Tetapkan Nilai Default untuk Kolom di SQLite:Batasan DEFAULT