Jump to content
Forumu Destekleyenlere Katılın ×
Paticik Forumları
2000 lerden beri faal olan, çok şukela bir paylaşım platformuyuz. Hoşgeldiniz.

[SQL] Biri bana table key'leri anlatabilir mi acaba ?


Zopik

Öne çıkan mesajlar

Nedir bu key'ler. Bir tabloda neden key belirlemek zorundayım ? Primary Index ya da Unique olunca ne oluyor olmayında ne oluyor ? Neden auto increment dediğimde mutlaka bir primary key yaratmak zorunda kalıyorum.

elimde bir kaç farklı Php & MySql şeklinde kitap var fakat bu çok süper müper eserler hiç bir şeyin mantığını anlatmamış. Uzmanlar için yazanı bile :p Birileri bana anlatsın lütfen ...
Link to comment
Sosyal ağlarda paylaş

key denen şey o table da her row a mahsus olan unique şeydir
öğrenci listesi yapıcan diyelim
öğrenc i numarasını key tutarsın?
nyie
çünkü aynı iki öğrenci aynı numaraya sahip olamaz
ama aynı isimli, aynı soyadlı aynı sınıfta olan öğrenciler her zaman olabilir, bu yüzden unique bi id atamak zorundasın herşeye (en azından access de falan yaratıyosan, ben çok güzel key kullanmadan SQLQuery ile yaratabiliyorum table)

özel mesajına bak, msn imi vericem ordan konuşuruz[signature][hline]I repeat myself when under stress
I repeat myself when under stress
I repeat myself when under stress
I repeat.
Link to comment
Sosyal ağlarda paylaş

unique güzel açıklanmış
Primary key ise ilişkisel veri tabanında 2 databasi çakıştırmak için kullanılıyor bildiğim kadarıyla.

mesela bi tablo auto_inc te öğrenci adlaerını tutarken diğer tablo ise öğrenci notlarını tutuyor bunları çakıştırıp ahmet hangi notu almış görebilirsin.[signature][hline]There's someone who needs you.
Link to comment
Sosyal ağlarda paylaş

Hatta bunu şu şekile yaparsınız.

Tablo ogrenciler
id - name
1 - Ahmet Koca
2 - Mehmet Akif
3 - Hikmet Toparlak

Tablo notlar
id - ogrenciID - notlar
1 - 1 - 25
2 - 1 - 100
3 - 3 - 59
4 - 2 - 15

SQL Query ( Mysql de ) ;

SELECT ogrenciler.* FROM ogrenciler LEFT JOIN notlar ON ogrenciler.id = notlar.ogrenciID

( hatta bundan sonra WHERE ogrenciler. name = 'Mehmet Akif' şeklinde devam edilerek öğrenci adına göre filtrelenmiş bir query de yazılabilir )

Mssql de sub-select falan var bunun yerine, o daha kolay. Gerçi bir sürü şey var.[signature][hline]Q: How many IBM cpu's does it take to do a logical right shift?
A: 33. 1 to hold the bits and 32 to push the register.
Link to comment
Sosyal ağlarda paylaş

buda güzel
forumlarda yapılan olay gibi. Mesela Pm tablosu vardır bu pm içerisinde kimden kime kısmı id lerden oluşur ve bunları ana user datası ile join ettiğinde ahmetten mehmete mesaj gitmiş olduğunu görebilirsin.

[Bu mesaj adonis tarafından 29 Kasım 2004 14:12 tarihinde değiştirilmiştir]
Link to comment
Sosyal ağlarda paylaş

sharky bu arada paticik ne kullanıyor?
mysql, postgre?
mesela su isimlerin yanında yazan "?" daki işlemleri kolaylastırmak icin view falan kullanılabilir. muazzam hızlanma görülebilir hatta..

yalnız sanırım suan mysql view falan desteklemio..
bence mysql kullanıosanız db yi degistirin dicem :)
Link to comment
Sosyal ağlarda paylaş

tamam id ya da herhangi eşsiz bir değeri tablolarıma ekliyorum. ilişkili her tabloda aynı kişiye ya da aynı hedeye ait kayıtlarında id leri ya da verilen eşsiz değer de aynı oluyor. bu sayede aynı kaydın farklı tablolara bölünmüş bilgilerini toplarlayabiliyorum. buraya kadar bir sorun yok. aslında bir sorun zaten yok öğrenmek için soruyorum : )

phpmyadmin ile tablo yaratırken benden illaki alanlardan biri için key belirlememi istiyor. şimdi bu bahsettiğiniz gibi id içeren ve auto_increment özelliği atanmış bir alan. ben bu alana primary keyini atayabiliyorum. sorun çözülüyor ve bu sefer ben bu tabloyu oluşturabiliyorum. şimdi. mademki bu unique bir alan neden ben primary şeklinde bir key atayabiliyorum ? ya da bu eşleştirmeleri primary ya da unique alan belirlemeden de yapabildiğimi varsayarsaka böyle bir olaya ne gerek var. unique dediğim benzersiz verileri saklayacak peki o zaman id için neden primary kullanayım? tablolar arası ilişkiler zaten sağlanıyor. hani kullanırsın çünkü şu işe yarar + sı şudur gibi cevaplar olur ya. ben onlardan istiyorum size zahmet :)
Link to comment
Sosyal ağlarda paylaş

said:
CEDAY, 29 Kasım 2004 15:13 tarihinde demiş ki:
sharky bu arada paticik ne kullanıyor?
mysql, postgre?
mesela su isimlerin yanında yazan "?" daki işlemleri kolaylastırmak icin view falan kullanılabilir. muazzam hızlanma görülebilir hatta..

yalnız sanırım suan mysql view falan desteklemio..
bence mysql kullanıosanız db yi degistirin dicem :)


Ne yazık ki mysql kullanıor :) Kediyi vakti zamanında pati aylar önce çöktüğünde ikna edemedim psql e geçmeye.. :([signature][hline]Q: How many IBM cpu's does it take to do a logical right shift?
A: 33. 1 to hold the bits and 32 to push the register.
Link to comment
Sosyal ağlarda paylaş

mesajları üstünkörü okudum, biraz detaylı açıklayayım

sql (structured query language) dediğimiz sorgulama dilini kullanan veritabanları arasında en bilgili olduğum MsSql, onun üzerinden anlatayım.

sqlde (sql diye bahsettiğim mssql olacak bundan sonra) veriler page yapısı denen şekillerde tutulurlar. yani belirli büyüklüklerde gruplanmış halde sabit diskin belirli noktalarına atılırlar. bu şekilde veriyi tutmak ilk bakışta çok anlamsızdır çünkü bir özelliğe göre arama yapıldığı zaman farklı pagelerdeki satırlar ayrı ayrı çekilirler ve özellikle de where bilmemne = hasan şeklindeki sorgularda teker teker kontrol çok zorlaşır

fakat primary key kullanırsanız başka bir sanal tablo da hangi pagein hangi satırında tablonun hangi satırının tutulduğunu saklar. eğer clustered index ise diğer pageler buna göre düzenlenir ve sorgularınız hatırladığım kadarıyla %72 oranında hızlanır.

unique key ise bir veriyi tekrarlamanızı engeller. mssql karşılığı non-clustered indextir.

Not: mssql kullanmayalı 2 seneye yakın zaman oldu. kavram kargaşası yaşamış olabilirim[signature][hline]en ince yerim bileğim..!?!
Link to comment
Sosyal ağlarda paylaş

bu arada hemen görmüşken söyleyeyim

left join, inner join, right join ve outterjoin birbirinden farklı join çeşitleridir.

inner join benzer keyli tablolar için kullanılır. bu yüzden her tabloda tekrarlanmayan idler tutulur

misal
select tbl_users.name, tbl_users.surname tbl_books.hasan from tbl_users
inner join tbl_books
on tbl_users.id = tbl_books.studentid

bu tabloda aynı id'li öğrenciler aynı satırda çıkacaktır. yani tabloları birbirine uygun şekilde "merge" edecektir.

fakat left join derseniz ikinci tabloyu birincinin soluna, right joinde sağına ekleyecektir. fakat microsoft inner joinlerin çok daha hızlı çalıştığını iddia etmektedir.

outter join ise tabloları ilişkisiz bir biçimde çekecek ve yanyana ekleyecektir. yani bir satır, ilk tablodan birinci öğrencinin, ikinci tablodan 16. öğrenciye ait kitabın bilgileri alınarak oluşabilir.[signature][hline]en ince yerim bileğim..!?!
Link to comment
Sosyal ağlarda paylaş

said:
CEDAY, 29 Kasım 2004 15:13 tarihinde demiş ki:
mesela su isimlerin yanında yazan "?" daki işlemleri kolaylastırmak icin view falan kullanılabilir. muazzam hızlanma görülebilir hatta..
count(userid)'nin de bayağı hızlandırması lazım?
(count mu kullanılıyor diye merak edesim geldi)[signature][hline]en ince yerim bileğim..!?!
Link to comment
Sosyal ağlarda paylaş

o soru işareti de zaten userposts.php'ye gitmiyor mu?

o sayfayı limit 0,30 yavaşlatmaz zaten..

select userid from users where username = mum_chamber
burdan userid'yi alırsın.

select * from userposts where userid = userid order by date limit 0,30

dersin de. bu query bu kadar yavaşlama yapmaz, primary keyde aramalar çok hızlı olur..

yapsa yapsa sağ üstteki postcount sorun yapar.[signature][hline]en ince yerim bileğim..!?!
Link to comment
Sosyal ağlarda paylaş

1-2 GB veritabanın olunca, insanlar sadece "ne gerek var dediğinde", suratına enteresan enteresan bakalar :)[signature][hline]Q: How many IBM cpu's does it take to do a logical right shift?
A: 33. 1 to hold the bits and 32 to push the register.


[Bu mesaj sharky tarafından 29 Kasım 2004 23:11 tarihinde değiştirilmiştir]
Link to comment
Sosyal ağlarda paylaş

postcount ayrı bi tabloda tutuluyosa şöle yapılcak

select userposts.entry, userposts.userid,users.userid,users.name,counttable.userid,counttable.UC from userposts, users, counttable where users.userid=userposts.userid and users.userid=counttable.iserid and users.name='Ceday'

gibi mesela..

post sayısı tutulmuosa performans icin ya view kullanmak gerekir ya da db ye eklemek..

[Bu mesaj CEDAY tarafından 30 Kasım 2004 00:03 tarihinde değiştirilmiştir]
Link to comment
Sosyal ağlarda paylaş

×
  • Yeni Oluştur...