SORU
18 NİSAN 2011, PAZARTESİ


Ne zaman pozitif bir tablo kullanmak yerine bir bit maskesi olarak bayrak saklamak için daha iyi?

Kullanıcılar farklı özelliklerini kullanmak için farklı izinler (örneğin, Oluştur, İndirin, Baskı, Onaylama Okuma, vb.) sahip olduğu bir uygulama üzerinde çalışıyorum. İzinler listesinde sık sık değiştirmek için beklenen değil. Veritabanında bu izinleri depolamak için nasıl bir kaç seçenek var.

Ne durumda 2 Seçenek daha mı iyi olur?

Seçenek 1

İlişkilendirilebilir bir tablo kullanın.

User
----
UserId (PK)
Name
Department
Permission
----
PermissionId (PK)
Name
User_Permission
----
UserId (FK)
PermissionId (FK)

Seçenek 2

Her kullanıcı için bir bit maskesi mağaza.

User
----
UserId (PK)
Name
Department
Permissions
[Flags]
enum Permissions {
    Read = 1,
    Create = 2,
    Download = 4,
    Print = 8,
    Approve = 16
}

CEVAP
18 NİSAN 2011, PAZARTESİ


Muhteşem bir soru!

Birincisi, hakkında bazı varsayımlar yapalım "". daha iyi

Çok disk alanı umurunda olmadığını varsayıyorum - bir bit maskesi görüş alanı bir noktadan etkili olur, ama eğer SQL server kullanıyorsanız çok önemli emin değilim.

Hız önemsiyorsun varsayıyorum. Bir bit maskesi hesaplamaları kullanırken çok hızlı olabilir ama bit maskesi sorgularken bir dizin kullanmak mümkün olmayacaktır. Bu o kadar önemli değil, ama eğer kullanıcı erişim oluşturmak öğrenmek istiyorsanız, sorgunuzu gibi bir şey olur

select * from user where permsission & CREATE = TRUE

(Server bugün yolda SQL erişim yok). Bu sorgu matematiksel işlem nedeniyle bir dizin kullanmak mümkün olmayacaktır - eğer kullanıcıların büyük bir sayı varsa, bu oldukça acı verici olur.

İdame önemsediğini sanıyorum. Görüş sürdürülebilirlik açısından, bit maskesi açık izinler saklamak gibi temel sorun alanı olarak ifade edilir. Neredeyse kesinlikle veritabanı da dahil olmak üzere birden fazla bileşen üzerinde bit maskesi bayrakları - değerini eşitlemek gerekecek. İmkansız değil, ama arka tarafımda bir ağrı.

Başka bir yol var sürece yani,", bit maskesi yol normalleştirilmiş bir veritabanı yapısı. izinleri depolamak kadar iyi değildir derim "daha iyi değerlendirilmesi Ben katılmıyorum bu "yavaş çünkü yapman gereken bir birleşim" - eğer sen tamamen işlevsiz veritabanı, mümkün olmayacaktır ölçü bu ise sorgulama olmadan yararına bir aktif dizin olabilir noticably daha yavaş bile birkaç bin kayıtları).

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • NikkoNantone

    NikkoNantone

    21 Kasım 2011
  • MofoHifi Records

    MofoHifi Rec

    15 HAZİRAN 2006
  • Philip DeFranco

    Philip DeFra

    16 EYLÜL 2006