bir "uygulama anahtar" ve "teknik anahtar" arasındaki farkı anlamak gerekir.
teknik anahtar bir öğe benzersiz yapmak için tek amacı vardır. Genellikle INTEGER veya BIGINT, oluşturulan (kimlik, her neyse). Bu anahtar, veritabanındaki nesneleri bulmak için kullanılır, bir nesneyi çabucak anlamaya devam eder (ID'lerin> 0 olması gerekir, yani varsayılan ID == 0 olan bir nesne henüz DB'de değil), vb.
uygulama tuşu başvurunuzun kapsamında bir nesnenin mantıklı gereken bir şeydir. Bu durumda, galerideki fotoğrafların sırası. Bunun veritabanı için hiçbir anlamı yoktur.
Sipariş listesi düşün: Bu, çoğu dilde varsayılan değerdir. Bir dizinin eriştiği bir dizi öğeniz var. Bir veritabanı için, bu dizin bir uygulama anahtarıdır, çünkü veritabanındaki kümeler sırasızdır (veya SİPARİŞ BY) belirtmedikçe veritabanı herhangi bir sipariş vermez. Aynı nedenden ötürü, bir sorgudan gelen sonuçlara çağrı yapmak bir acıdır: Veritabanları gerçekten “konum” fikrini sevmezler.
Yapmanız gereken şey, bir dizin satırı eklemektir (örn. Galerinizde hangi konumda olduğunu gösteren bir INTEGER, bu sütunda bir dizin oluşturmanıza rağmen daha hızlı erişim için bir veritabanı dizini değildir). .) ve bunu koru. Her ekleme için, UPDATE index = index + 1 where index >= insertion_point
, vb.
Evet, bu berbat. Tek bildiğim çözüm: Bunu sizin için çözen bir ORM çerçevesi kullanın.
Bunu yapmanın hiçbir ANSI yolu yok. Hangi DB sunucusunu kullandığınızı söyleyebilirseniz, yardımcı olabiliriz. Eklemek için sorunuzu düzenleyin. – Seb
Ah evet .. MySQL .. üzgünüm unuttum o bit –
Bunu neden yapmak istiyorsun? Biraz netleştirin - çünkü önceki ve sonraki fotoğrafları gösterecek pozisyonu bilmeniz gerekmiyor ... vb. –