0

2 tablo Users ve Events var.SQL Server veritabanı tasarımı kullanıcıları ve olay tabloları ilişkilendirme

kullanıcılar hakkında Users tablo bilgileri depolar: isim, e-posta, vb Events tablo olayların listesi vardır: Yeni bir tabloya bu iki harita nasıl kayıt, şifre sıfırlama, vs vs

Kullanıcı etkinliği hakkında geçmişi nerede saklayabilirim.

Örnek kullanıcı sıfırlama parolası, örneğin UserEvents adlı üçüncü bir tabloya bir kayıt ekleyin.

Sorunum bu 3'üncü tabloyu oluşturmaktır. Bu yüzden ona birleşik bir anahtar kullanıcı ve olay ekleyicisi eklersek, bu benzersiz olmayacaktır. Bir kullanıcı bir şifreyi birden çok kez sıfırlayacağından, aynı kullanıcı kodunun birleşik bir ana anahtarı ile sonuçlanacak ve eventid'i kaydedecektir.

  • UserId (PK)

Olay Masa aşağıdaki sütunları vardır

  • Adı
  • Email:

    • eventId (

      Kullanıcı Tablosu aşağıdaki sütunları vardır PK)

    • İsim
    • Açıklama

    UserEvent tablo böyle olmalı:

    • Kimliği (PK) - oluşturulan veya kimlik tipi
    • KullanıcıNo (FK Kullanıcı tabloya - KullanıcıNo)
    • EventId (FK - Olay tablosu - EventId)

    Kullanacağım EF7 kod ilk yaklaşımı. Etkinlikler tablosunda "Ad" sütununda, kullanıcılar tablosundaki bir bağlantı için "Ad" değilse yapabilirsiniz,

    SELECT * 
    FROM Users (NOLOCK) 
    INNER JOIN Events (NOLOCK) ON Users.Name = Events.Name 
    

    : Bir görünüm oluşturmak istiyorsanız

  • +0

    Hangi RDBMS bu içindir? Lütfen "mysql", "postgresql", "sql-server", "oracle" veya "db2" - veya tamamen başka bir şey kullanıp kullanmadığınızı belirtmek için bir etiket ekleyin. –

    +0

    SQL Server kullanıyorum – user2818430

    cevap

    1

    @ gokaysatir Milyonlarca satır içeren veritabanları, NOLOCK'u kullanmak için gerçekten iyi bir argüman değildir. Milyonlarca satır veritabanı oldukça normal. Eğer kullanıcılar NOLOCK kullanmadığınız zaman giriş yapamazlarsa, kesinlikle diğer (veri değiştirme) oturumları nedeniyle engellenir. Eğer gerçekten NOLOCK'a ihtiyacınız varsa, kullanıcılar giriş yapabilir, tasarımda yanlış bir şeyler var ya da diğer işlemler gerçekten verimli değil.

    NOLOCK'un dezavantajını hiç düşündünüz mü? Kirli yazılar gibi mi? Kirli okumaların ne olduğunu biliyor musun?

    @gokaysatir NOLOCK kullanımı için bence. Lütfen NOLOCK'u kullanmayın çünkü gerçekten orada olmayan verileri gerçekten okuyabilirsiniz. Sadece bunun gerçekten sorun olduğundan emin olduğunuzda kullanın. Varsayılan olarak kullanmayın.

    Sorunun cevabı için. Bu masa tasarımının iyi olduğunu düşünüyorum.

    1

    , böyle bir şey kullanabilirsiniz bu tabloları bağlamayın.

    Bir görünümü içine bağlayabilmek için tablolarda paylaşılan bir sütuna ihtiyacınız vardır.

    Örnek: Olayların sahibi olan kullanıcıya bakarak Etkinlikler tablosunda Kullanıcı Kimliği sütun olabilir.

    Evet, tabloların bağlanacak bir paylaşımlı sütunu olmalıdır.

    Örnek: ID: 14 ​​olan bir kullanıcı bir giriş isteği gönderdi.Olaylar tablo SQL dizesi şu şekilde olmalıdır: Ayrıca

    INSERT INTO Events (UserID, EventID) 
    VALUES(14, 1) 
    

    böyle, adları ile OlayNo 's bağlayan örneğin, uygun bir daha tablo gerekir:

    Tablo EventNames

    EventID Name 
    1   Login request. 
    
    +0

    Neden bu -1 için? – gokaysatir

    +0

    Etkinlik geçmişini tutmaya çalışıyorsanız, bunu böyle yapmalısınız. Neye ihtiyacın olduğunu bilmiyorsun. – gokaysatir

    +0

    Geri bildirim için teşekkürler. Milyonlarca satır içeren büyük bir veritabanı ile uğraşıyorum. NOLOCK kullanmazsam, kullanıcılar veritabanına bağlanamaz. Yani tasarım kararı olmalı. Bunu reddetme nedeni olarak göremiyorum. – gokaysatir

    İlgili konular