[]

Veritabanını çok dilli kullanmak

tam anlatamayabilirim.

web sitesi yapıyoruz dinamik.
işte atıyorum, urunler tablosu var. ürünün adı fiyatı açıklaması vs. yer alıyor dimi? di.

ardından müşteri istiyor ki, biz bu siteyi çift dilli yapalım.
haliyle veritabanında problem yaşıyorum, bu sefer tüm tabloları tek tek çift dilli yapıyorum işte ne bilim: urun_eng, urunAciklama_eng gibi tablolara ek sütunlar koyuyorum.

muhtemelen çok amele bir yöntemdir, ama kafam buna bastı tek başıma.
o yüzden şimdi sizden yardım istiyorum:

veritabanlarını nasıl kurgulamalıyım ki, müşteri bana "çok dilli olsun ya" dediğinde en temiz şekilde veritabanını çok dilli hale getirebileyim. (biri ingilizce der, öbürü ingilizce+arapça+fransızca der hani sayısını da bilemem)

siz nasıl uyguluyorsunuz?

not: mysql kullanıyorum. php kullanıyorum.

 
örneğin master tablomuz ürün adında bir tablo olsun.


Tablo adı: Language_codes

L_ID(p_key) X KOLON Y KOLON

Tablo adı : URUN

UR_ID(P_KEY) X kolon Y kolon z KOLON

Tablo adı: URUN_ADLARI

UA_ID(P_KEY) UR_ID(F_KEY) LANGUAGE_ID(F_KEY) URUN ADI




en makulu, ve en optimize edilebilecek hali bence budur. ben hep bu yapıyı kullanırım.

sorgusu da şuna benzer;

SELECT U.UR_ID, UA.URUN_ADI FROM URUN U, URUN_ADLARI UA WHERE (U.UR_ID=UA.UR_ID AND UA.LANGUAGE_ID=1) AND .......
  • streak  (10.04.15 10:56:31 ~ 10:59:33) 
Verdiğiniz örnekten gidersem, her yeni dil istendiğinde bir sütun eklemeniz gerekecek.
Bu da ileride veri yükü arttıkça aksaklıklara sebep olur.

İlk aklıma gelen, ayrı bir tablo ayarlayıp oraya dil ve değer, kaynak olmak üzere bu şekilde bir yapılandırma yapılabilir.

Misal,

Dil(ID) - Table(ID) - Value(ID) - Değer

Tabi burada normalleştirme devreye girecek. Dillerin ve tablo isimlerinin tutulduğu bir config tablonuz olması gerekecek. Value ID ise örnekteki ürünün yer aldığı tablodaki ID değeri.

İlk etapta böyle bir model geldi aklıma ama nette daha oturaklı örnekleri illaki vardır.
  • spadram  (10.04.15 11:01:40) 
URUN DİL KARSILI
SUT TR SUT
SUT EN MILK
SUT FR ...


genelde böyle oluyor yamulmuyorsam.
  • rhan  (10.04.15 11:02:24) 
@rhan, evet ya senin dediğin baya mantıklı geldi şuan.

diğer arkadaşları da okuyorum hemen

hatta diğer arkadaşlar da aynını yazmış.
ben niye bunu akıl edemedim ya neyse :)
  • tchuck  (10.04.15 11:03:10 ~ 11:03:52) 
ürünler tablosu dil bağımsız bilgileri içerir, ekleme tarihi, fotoları, stok sayısı vs.

ürünler_i18n tablosu da ürün id ve dil primary key olarak şekilde relational olarak dil bağımlı hale getirilir, select ederken eğer çok fazla ürün ve ziyaretçi yoksa (milyonlardan bahsediyorum) join ile aksi halde primary key ile select yapılır.

örn:

create table products (
id integer auto_increment primary key,
stock integer not null default 1,
created_at datetime not null
);

create table product_i18n (
product_id integer not null,
lang varchar(2) not null,
product_name varchar(255) not null,
FOREIGN KEY (product_id) REFERENCES products(id),
PRIMARY KEY ( product_id, lang),
);



birde doctrine falan kullanırsan eğer bu işleri otomatik çözüyor.
  • selam  (10.04.15 11:05:08 ~ 11:15:05) 
1
buraya yazılanların hakları Sir Anthony Hopkins'e aittir.
yazan eden compumaster, ilgilenen eden fader
modere edenler angelus, Artibir, aychovsky, baba jo, basond, compumaster, deckard, duyulmasi gerektigi kadar, fader, fraise, groove salad, kahvegibi, kaymaktutmayansicaksut, kibritsuyu, monstro, pandispanya, robin, ron dennis
bu sitede yazılanların hiçbiri doğru değildir. site içeriği küçükler için sakıncalı olabilir. yazılardan yazarları sorumludur. kaynak göstermeden alıntılanamaz. devlet tarafından atanmış bir kurumun internet üzerinde kimin hangi bilgiye ulaşıp ulaşamayacağına karar vermesi insan haklarına aykırıdır. web siteleri kullanıcıların istekleri doğrultusunda bağlandıkları yerlerdir. kullanıcılar isterlerse bir web sitesine bağlanmayabilirler. bu güçleri ve imkanları mevcuttur. bir kullanıcı bir siteye bağlanmak istiyorsa bu onun tercihi ve hakkıdır. bağlanmak istemiyorsa bu yine onun tercihi ve hakkıdır. halkın kendisine hizmet etmesi için görevlendirdiği kurumlar hadlerini aşıp halka neye ulaşıp ulaşmayacağını bilmeyen cahil cühela muamelesi edemezler. ebeveynlerin çocuklarını sakıncalı içeriklerden koruması için çok sayıda bedava ve ücretli yazılım mevcuttur. bu yazılımlar bir web tarayıcısını kullanmaktan daha karmaşık teknik bilgi gerektirmemektedir. devletin milletini küçük düşürmesi ve ebleh yerine koyması yasaktır. Skimlinks ile linkler üzerinden yönlendirme payı alınmaktadır.