Bir günlük tablosu bir kimlik alanı mı yoksa birincil anahtar mı almalıdır?


12

Belirli dosyaların başka bir sisteme verildiğinde datetime damgasını yakalayan bir günlük tablosu var.

ExportedLog tablosunda şu anda üç alan vardır:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)

Bunu gözden idgeçirdiğimde, bu masaya hiçbir birleşim olmadığı için alanın hiçbir amaca hizmet etmediğini gördüm . Bu tabloda çalışan tek şey, iletileri işleyen ve bu günlük tablosuna eklenen toplu işin eklenmesidir.

idAlanı kaldırmalı mıyım ?

Ben de bir birincil anahtar olmalı messageIdya exportedDateTimeya da her ikisi?


2
Bu hangi DBMS içindir?
ypercubeᵀᴹ

Yanıtlar:


10

Kimlik alanını kaldırmalı mıyım?

Bunu tutmanızı tavsiye ederim.

Şimdi alana ihtiyacınız olmayabilir , ancak gelecekte size gerçekten yardımcı olabilir - ya da her günlük girişi için dosyaların ayrıntılarını saklamanız gerekiyorsa?

Bu tablonun ne kadar büyük ve ne kadar hızlı olacağını bilmiyorum, ancak büyük bir tabloya bir sütun eklemek genellikle pahalı bir işlemdir. Tablo nispeten küçükse, depolama alanı açısından tutmak önemli değildir. IMO, sütun tutmak ve daha sonra potansiyel bir baş ağrısı kaydedin.

MessageId veya exportedDateTime veya her ikisinde de birincil anahtar olmalı mı?

Tek messageIdbaşına bu tabloda benzersiz gibi görünmüyor (yanlış olsa da) ve tek başına bir tarih / saat sütununda benzersizlik oluşturmak potansiyel olarak kopyalar (ve dolayısıyla hatalar) oluşturabilir. Kalan tek seçenek, yukarıda ortaya koyduğum senaryo göz önüne alındığında özellikle çekici olmayan 2 sütunlu bir anahtardır.


Aslında, bu cevabın anlamı , sütunu tutmanın büyük bir anlaşma olmadığıdır (varsayıyorum), ancak daha sonra ihtiyaç duyulması büyük bir anlaşma olabilir ve / veya geri koymak için ekstra iş gerektirebilir.


6
  • Bu tabloda birleştirme, güncelleme ve silme işleminiz yoksa, anahtarlara hiç ihtiyacınız yoktur.

  • Durum böyle değilse ve messageIdbenzersizse, birincil anahtar yapabilirsiniz.

  • Benzersiz değilse, ancak (messageId, exportedDateTime), bunu bileşik bir birincil anahtar yapın.

  • (messageId, exportedDateTime)Kombinasyon bile kopyalar verebilir ve güncellemeler verebilir ve silme gerekebilir (yanlışlıkla eklenen satırları kaldırmak için), idalanı olduğu gibi bırakmanız daha iyi olur.


0

Birincil Anahtar zarar vermez ... günlük / denetim izinin amacını düşünürseniz, ileride bir sorunu çözmek veya verileri geri yüklemek vb. İçin kullanılacaktır (sorgulanacaktır) ve muhtemelen diğerleriyle birleştirilecektir. bu tür işleri gerçekleştirmek için mevcut log olmayan / denetim tabloları.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.