Bileşik anahtar için alternatif

3 Cevap php

tüm tablolar birincil anahtar için iki sütun yaşıyorsanız ben nerede veritabanı yapısı var.

for an example the table Author has two columns like AutherId which is a auto increment number and the pc_id which is unique to that pc the those are the composite keys for the table. but when it comes to relations i have to define the both columns for each and every relation. and since im planning to use Docrtine (PHP ORM) it is bit problematic to use it like that.

so i wonder if i could generate a unique id (combining the pc_id as well) and use it as the primary key.

php kod zaman () gibi. rand (1000,9999). $ Pc_id

so that the id is generated by concatenating time + a random number between 1000 and 9999 and the pc_id (pc_id is also a number starting from 1). but this makes a 20 digit number (when the pc_id is 6 digit) which needs bigint to store

Bunun için iyi bir alternatif var

Selamlar

3 Cevap

Genellikle bu amaçla iş bilgilerini kullanarak yerine bir birincil anahtar oluşturmak auto DB olması iyi bir fikir olarak kabul edilir.

Eğer benzersizliği zorlamak istiyorsanız Tabii ki hala iş bilgilere contraints olabilir. Ama bu şekilde size yabancı anahtarları ve bu ile sahip sorunları önleyebilirsiniz.

Yani ben bir birincil anahtar oluşturmak, demek, ve iş değerleri benzersiz bir kısıtlama olsun

AuthorID - Yazar tablo sadece bir birincil anahtarı gerektiriyor. Neden hiç aynı kimliğe sahip iki yazar olurdu? Eğer ilişkiyi yazar için bir çok pc varsa o AuthorID için PcId bir birincil anahtar ve bir alanı ile ayrı bir pc tablo var.

Sen vekil anahtar olarak bir UUID kullanabilirsiniz. Tüm sunuculara global eşsiz. Dezavantajı elle etrafında geçmek için hantal olabilir bir 36 bayt dize olmasıdır.

Eğer şartları karşılaması halinde, orada UUID bir 64bit tamsayı gösterimi olan uuid_short() da, ama nasıl / dize yarısı düşer gibi, genel benzersiz kabul edilebilir belirli kısıtlamalar var UUID 128bit bir "Bigint imzasız" alanına sıkmak olabilir böylece.