Bir benim web uygulaması tam restyle başında im ve ben güvenilir olabilir iyi bir veritabanı tasarımı hakkında bazı şüpheler var, sorgu-performans ve kullanıcılar tarafından tamamen özelleştirilebilir, aynı zamanda (kullanıcılar alışkanlık veritabanını özelleştirebilirsiniz yapısı, fakat uygulamanın fonksiyonelliğini).
Yani, benim gerçek durum, örneğin, basit bir kullanıcının tablo:
id | name | surname | nickname | email | phone
1 | foo | bar | foobar | foo@bar.com | 99999
Thats it.
Ama benim müşteri biri belirli bir kullanıcı için, 2 e-posta adreslerini veya telefon numaralarını istiyorum söylüyorlar sağlar.
E kadar şimdi, ben sadece kullanıcıların tablodaki sütunlar ekleyerek bu sorunu çözmek için kullanılır:
id | name | surname | nickname | email | phone | email_two | phone_two
1 | foo | bar | foobar | foo@bar.com | 99999 | foo@bar.net | 999998
Ama yeni uygulamanın sürümü ile bu şekilde cant kullanmak .. ben yapısını düzenlemek için Müşterimizin çağrısına sevmiyorum, bundan sonra mojito içme gibi olacak :)
Yani, ben sadece başka bir tablo ile, insanlar gümrük alanını tanımlayabilirsiniz bir çözüm düşündüm:
id | table_refer | type_field | id_object | value
1 | users | phone | 1 | 999998
2 | users | email | 1 | foo@bar.net
değişmeden kullanıcıların bir tablo tutmak.
Ama bu şekilde 2 sorunları var:
- Biliyorum ne için, ben 1 kullanıcıyı silerseniz otomatik olarak yabancı anahtar kaskad 'table_refer' değeri = kullanıcıları ve id_object sahip ikinci tablodaki tüm satırı silin ki, bu şekilde Foreigns tuşunu kullanmak için hiçbir olasılık = var users.id. Tabii, bazı tetikleyiciler işlevini kullanabilirsiniz edeceğiz, ama güvenilirlik bazı kaybedersiniz.
- Ben veritabanını sorgulamak gerekir olduğunda, ön ben de option_table .. tüm ... etek kontrol etmek gerekir, 'foo@bar.net' maç kullanıcılar almak, ve bu benim kod kompleksi yapacak ve daha az güvenilir ve dağınık birçok kullanıcıların tablo alışkanlık 'option_table' ile 'genişletilmiş' tek kişi olduğunu varsayarak .. katılır, gri bir görünüm gibi görünüyor.
Amacım ihtiyaç duydukları gibi, benim müşteriler varsayarak, uygulama (kullanıcılar, ürün, fatura, baskı görünümleri, fotoğraflar, haberler, vs ..) hemen hemen tüm nesne için, gibi birçok özel alanlar ekleyerek izin olduğunu, bu tablonun en (3 masa ve kalıtım gerarchy ile, 2 tablodaki parçalı) bölümlenmiş olacaktır.
You think my way can be good, do you know some other better, or am i in a big mistake? Please, every suggest is gold now!
EDIT:
What i'm lookin for could be simplifyed ith the 'articles-custom-fields' in wordpress blogs. My goal is to let the user to define new fields that he needs, for example, if my users table is the one above, and a customer need a field that i havent prevent, like the web-site url, he must be able to add it dinamically, without edit the database structure, but just the data.
Ben 2 ° tablo (her nesne için maibe 1) iyi bir çözüm olabilir diye düşünüyorum, ama yine de daha iyi yollar için bekliyorum!