Veritabanı tasarımı: php sabitler SQL veritabanı anahtarları Eşleştirme?

0 Cevap php

Aslında ben hakkında birçok kez merak ve için tatmin edici bir çözüm bulamadılar basit bir tasarım sorunudur. Benim örnek php-sql ile, ama bu kesinlikle çok diğer diller için de geçerlidir.

Ben sadece çok az girdileri içeren küçük bir veritabanı tablo var, ve bu güncelleştirilmesi gereken hemen hemen hiç. örneğin, bu usertype tablosu:

usertype_id (primary key)  | name       | description
---------------------------+------------+-------------------
1                          | 'admin'    | 'Administrator'
2                          | 'reguser'  | 'Registered user'
3                          | 'guest'    | 'Guest'

Şimdi php kodu, sık sık ben uğraşıyorum kullanıcı türünü kontrol ya da karşılaştırmak gerekir. Kullanıcı türleri veritabanında saklanır beri, ben de yapabilirsiniz:

1) Select * from the usertype table at class instantiation, and store it in an array.
Then all the ids are available to the code, and I can do a simple select to get the rows I need. This solution requires an array and a db query every time the class is instantiated.

$query = "SELECT info, foo FROM user WHERE usertype_id = ".$usertypes['admin'];

2) Doğru usertype_id seçmek için name sütunu kullanın, bu yüzden etkili bir diğer tablolar ile katılabilirsiniz. Bu, daha fazla veya daha az 1 eşdeğer) ama php nesne bütün türünüz tablo önbelleğe gerek olmadan:

$query = "SELECT info, foo FROM user JOIN usertype USING (usertype_id) WHERE usertype.name = 'admin' ";

3) türünüz tablodaki anahtarları maç sabitleri tanımlayın:

// As defines
define("USERTYPE_ADMIN",1);
define("USERTYPE_REGUSER",2);

//Or as class constants
const USERTYPE_ADMIN = 1;
const USERTYPE_REGUSER = 2;

Ve sonra basit bir seçme yapmak.

$query = "SELECT info, foo FROM user WHERE usertype_id = " . USERTYPE_ADMIN;

Bu muhtemelen en verimli kaynak bir çözümdür, ama sen türünüz tabloda şey değiştirmek gerekiyorsa tablo ve kodunu güncellemek zorunda gibi, korumak için kötü ..

4) usertype tablo Hurda ve sadece php kod türlerini tutmak. Herhangi bir değer veritabanına almak ve kullanıcı türüne atanmış olsun sağlar, çünkü ben gerçekten bu sevmiyorum. Ama belki, her şey o kadar kötü değil ve ben sadece basit olması gereken bir şey komplike ediyorum, kabul ..

Bu tutarlı değil ve bir indeks ile usertype.name, o kadar kötü olamaz, çünkü Neyse, ben en sevdiğim çözümü özetlemek için # 2. Ama ne sık sık kullanarak sona erdi ettik verimlilik için, # 3'tür.

Bunu nasıl yapardın? Herhangi bir iyi çözümler?

(Düzenleme: Sabit sorgu # 2)

0 Cevap