Merhaba, Ziyaretçi. Lütfen giriş yapın veya üye olun.
Aktivasyon mailiniz gelmediyse buraya tıklayın.
19, 2008, 01:49:07 pm
42880 Mesaj 8123 Konu Gönderen: 17996 Üye
Son üye: asiksebo
Turk-Php.Com Forum  |  Yardım Forumları  |  Veritabanı Yardım Forumu  |  MySQL tablo tasarım, sadece fikrinizi belirtiniz!!! « önceki sonraki »
Sayfa: [1] Yazdır
Yazan Konu: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!  (Okunma Sayısı 362 defa)
cem dermen
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 45


Üyelik Bilgileri
MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« : 28, 2008, 04:51:05 am »

+---+---+-------+---------+---------+-----+---------------------+--
  no  ad  soyad   email       ülke       tel      bölüm
+---+---+-------+---------+---------+-----+---------------------+
  1     a     d           @                               fizik,kimya
  2     b     c           @                               kimya
  3     g     j                                              fizik
  4     h     k                                             bilgisyar
  5    w     ş                                              linux, fizik, kimya
  6    k      m                                            linux, science, software, computational, data mining, system programming . . .
 ..     ..    ...            ...                               ......


bu şekilde bir veri tabanı planladım,

bölüm kısmında fizik , kimya, biyoloji, sosya bilimler, bilgisayar bilimleri , yapay zeka, işletim sistemleri yaklaşik 150-200 tane farklı bölüm olacak..

kişileri bu bölümlere göre ayrı ayrı sayfalarda sıralayacağim..

mesela  fizik sayfasına girince a ,g ve w  kullanıcılarının gerekli bilgileri çıkacak,

mysql> select bölüm from tablo_ismi where bolum=’fizik’;   böyle bir aratma methodu uygulayacağim...ve fizik.php sayfasında verileri alacağim...

mysql> select bölüm from tablo_ismi where bolum=’computational’;   böyle bir aratma methodu uygulayacağim...ve computational.php sayfasında verileri alacağim...

tabi bir kişi 100 tane bölümede üye olabilir...

bu veritabanına sadece sil, ekle, güncelle gibi fonksiyonları kullanacağim...

sizce bu şekilde bir çalişma prensibi mantıklımı?
bu şekilde bir veri tabanı sistemi mantıklı mı?
ya da daha değişik bir methodta denenebilir mi?

yardımlarınız için şimdiden teşekkur ederim






Logged
tayfun_de
PHP Öğrencisi
*
Offline Offline

Mesaj Sayısı: 104


Üyelik Bilgileri
Ynt: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« Yanıtla #1 : 28, 2008, 05:57:07 am »

merhaba,

bence kaydedilecek bilgileri ayri tablolarda tutarsan, yapilacak islemler daha kolay olur.

t_user_subject tablosunda user ile ilgili bölümlerin kaydedilmesinde
mysql REPLACE INTO komutunu kullanarak islemleri daha da kolay yürütebilirsin
( INSERT ve UPDATE i kullanmadan)

selam

tayfun

CREATE TABLE `t_user` (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`first_name` VARCHAR( 40 ) NOT NULL ,
`last_name` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 128 ) NOT NULL ,
`country` VARCHAR( 128 ) NOT NULL ,
`phone` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> describe t_user;
+------------+--------------+------+-----+---------+----------------+
| Field      | Type         | Null | Key | Default | Extra          |
+------------+--------------+------+-----+---------+----------------+
| user_id    | int(11)      | NO   | PRI | NULL    | auto_increment |
| first_name | varchar(40)  | NO   |     |         |                |
| last_name  | varchar(40)  | NO   |     |         |                |
| email      | varchar(128) | NO   |     |         |                |
| country    | varchar(128) | NO   |     |         |                |
| phone      | varchar(30)  | NO   |     |         |                |
+------------+--------------+------+-----+---------+----------------+
6 rows in set (0.00 sec)




CREATE TABLE `t_subjects` (
`subject_id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`description` VARCHAR( 128 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;

mysql> describe t_subjects;
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| subject_id  | smallint(6)  | NO   | PRI | NULL    | auto_increment |
| description | varchar(128) | NO   |     |         |                |
+-------------+--------------+------+-----+---------+----------------+
2 rows in set (0.00 sec)



CREATE TABLE `t_user_subject` (
`user_id` INT NOT NULL ,
`subject_id` SMALLINT NOT NULL ,
PRIMARY KEY ( `user_id` , `subject_id` )
) ENGINE = MYISAM ;

mysql> describe t_user_subject;
+------------+-------------+------+-----+---------+-------+
| Field      | Type        | Null | Key | Default | Extra |
+------------+-------------+------+-----+---------+-------+
| user_id    | int(11)     | NO   | PRI |         |       |
| subject_id | smallint(6) | NO   | PRI |         |       |
+------------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

Logged
cem dermen
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 45


Üyelik Bilgileri
Ynt: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« Yanıtla #2 : 28, 2008, 01:56:25 pm »

Kod:

CREATE TABLE `t_user` (
`user_id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`first_name` VARCHAR( 40 ) NOT NULL ,
`last_name` VARCHAR( 40 ) NOT NULL ,
`email` VARCHAR( 128 ) NOT NULL ,
`country` VARCHAR( 128 ) NOT NULL ,
`phone` VARCHAR( 30 ) NOT NULL
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;


CREATE TABLE `t_subjects` (
`dep_id` SMALLINT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`department` TEXT
) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci;


ilk tabloyu phpmyadmin ya da mysql çaliştimaya kalktığımda

8. satırda  ' ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_general_ci ' hatası veriyor neden olabilir? ??

Apache(1.3.23), MySQL(3.23.48) and PHP(4.1.1) bunları kullanoyorum acaba versiyonlarda mı sorun var?



Logged
kazaan
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 239


Üyelik Bilgileri WWW
Ynt: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« Yanıtla #3 : 29, 2008, 04:16:03 am »

Bence iki tablo kullan birincisinde
no  ad  soyad   email       ülke       tel  olsun ikinci tablondada
no  bolum olsun islemlerin daha kolaylasır gibime geliyor, yani bir sutunda 100 tane bolum secmis biri varsa bunu LIKE kullanarak aratabilirsin, veya benim dedigim gibi iki tablo kurarsın,no ya gore bolum atarsın mesala bir kisi hem fizik, hem matematik secti nosuda 5 o zaman ikinci tabloya
5   matematik
5   fizik
diye verilerini girersin aratmada daha kolaylasır kodlarında daha hızlı calısır.
Logged

I am a man Who walks alone...
http://www.kazaan-ns.blogspot.com/
GaziMarşı
PHP Stajyeri
**
Offline Offline

Mesaj Sayısı: 446


Üyelik Bilgileri
Ynt: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« Yanıtla #4 : 10, 2008, 06:27:52 pm »

En mantıklısı 3 tablo kullanmak.  1.tablo kişi bilgilerini barındırmalı, 2.tablo bölüm bilgilerini barındırmalı, 3.tablo ise bu iki tabloyu ilişkilendirmeli...

Çünkü bir kişinin profilinde birden fazla bölüm olabilir. 3.tablo sayesinde daha esnek çalışabilirsin. 

Veritabanı tasarlarken her ayrı tür veriyi ayrı tablolarda tutmak en mantıklısı ve geliştirmeye açık olanı...
Logged

nercan
Yeni Kullanıcılar
*
Offline Offline

Mesaj Sayısı: 9



Üyelik Bilgileri
Ynt: MySQL tablo tasarım, sadece fikrinizi belirtiniz!!!
« Yanıtla #5 : 11, 2008, 05:00:51 am »

Bence 2 adet tablon olsun birinde kişi bilgilerini diğerinde bölümlerin bilgilerini oluştur... bunlar static tablolar. Bunların yanında bir de dinamic tablon olsun buda
atıyorum kisibolum olsun...
Kisi tablosu
ID-ADI-SOYADI..........
Bolum Tablosu
ID-BOLUMADI........
KisiBolum Tablosu
ID-KISI_ID-BOLUM_ID-AKTIF.....


Böyle bir durumda yani bir kullanıcı açıldığında Kisibolum tablosuna bolum tablosundaki kayıt kadar kayıt oluşturmalısın ve o kişi için bölümleri seçtikçe ilgili kaydın aktif alanını true yaparsın..
Aynı şey yeni bir bölüm girildiğinde de söz konusu olur....


Aynı mantıkla çok fazla kisi ve kullanıcım olacak diyorsan veri tabanını şişirmemek için kişiye bolum seçildiğinde kisibolum tablosuna bir kayıt oluturusun...

Anlattıklarımı aşağıda özetleyeme çalışayım...


1.Yol: Eğer iki tablonun çarpımı kisixbolum(1000x100)100000 den daha az bir değer olacaksa bu yolu kullanmanı tavsiye ederim...
Kisi Tablosu
ID -  ADI         -  SOYADI
1     DENEME      TEST
2     DENEME2    TEST2

Bolum TAblosu
ID  -  ADI         
1      FİZİK
2      KİMYA

KisiBolum Tablosu(Deneme kişisinin sadece fizik deneme2 kişisinin de fizik ve kimya aldığını düşünerek yazıyorum)
ID -  KISI_ID - BOLUM_ID - AKTIF
1     1            1                 true
2     1            2                 false
3     2            1                 true
4     2            2                 true


yukarıdaki bilgilerle 2.yol(çok kayıt varsa bunu kullanmanı tavsiye ederim)
ID -  KISI_ID - BOLUM_ID - AKTIF
1     1            1                 true
2     2            1                 true
3     2            2                 true

bence böyle bir sistem senin işini görebilir. Ben fazla mysql kullanmadım ama ben oracle da genelde 1.yol u kullanıyorum..

bunları görüntülemen için sql kodu
Kod:
select k.adı,k.soyadı,b.adı from kisi k ,bolum b,kisibolum bk
where bk.kisi_id=k.id
and bk.bolum_id=b.id
[and k.id=:kid]opsiyonel
[and b.id=:bid]opsiyonel


« Son Düzenleme: 11, 2008, 05:04:38 am Gönderen: nercan » Logged

Eğer yazılımcı olmak istiyorsan bilgisayara yapamayacağın hiç birşey olmamalı...
Sayfa: [1] Yazdır 
« önceki sonraki »
Gitmek istediğiniz yer:  


Turk-Php.Com Forum | SMF Forum Software © 2005, Simple Machines LLC. All Rights Reserved.