[]
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.
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 .......
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.
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.
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 :)
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.
ü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