Konuyu Paylaş : facebook gplus twitter

Konuyu Oyla:
  • Derecelendirme: 5/5 - 1 oy
  • 1
  • 2
  • 3
  • 4
  • 5
Primary Key mi Unique Key mi?
#1
Merhaba,

İsmi lazım değil, dünyaca yaygın bir ERP yazılımında (soranlara özelden belirteyim, burada reklamını yapmak istemem) Primary Key kullanımının olmadığını, kendilerine danıştığımda da "Primary Key" kullanımını terk ettiklerini, sebep olarak ise güncellemelerde Primary Key değerlerinin bizdekiyle müşterininki arasında çakışmaya neden olabildiğini söylüyorlar. Çözüm olarak ne kullandıklarını sorduğumda ise Primary Key yerine Unique Key kullandıklarını belirtiyorlar. Hakikaten ilgili ERP yazılımının veritabanını incelediğimde neredeyse hiç Primary Key kullanmadıklarını görüyorum.

Söz konusu ERP yazılımının MySQL, MsSQL, DB2, Oracle gibi veritabanlarıyla da çalıştığını bir not olarak belirtmek gerekir.

Sizin bu noktada tercihiniz ne olurdu? Ben, şahsen veritabanı performansı ve kayıt kimliklendirme anlamında Primary Key kullanılması gerektiğini düşünenlerdenim ama bu düşüncem doğru olmayabilir. Belki doğru, ama eksik bir düşünce de olabilir, o nedenle bu konuyu biraz münazara edelim, tartışalım, fikir alışverişinde bulunalım istiyorum.

Sizce neden Primary Key veya neden Unique Key kullanılmalı?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#2
Primary key aynı zamanda zaten unique bir alandır. Güncellemelerde nasıl bir sorun oluyormuş ki buna kara vermişler acaba merak ettim. Her ikiside aynı sonuca çıkmazmı zaten. Örneğin, sizde VT de 5 nolu prim yada uniq bir kayıt var, müşteri gitti bunu sildi veya içeriği değiştirdi, sonuçta tablolar değişti, naparsanız yapın sizdeki kayıt ile zaten tutmaz, nasıl bir kontrol varki aynı olmasını istiyorlar acaba ?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#3
Şöyle bir örnek üzerinden devam edelim;

Aşağıdaki örnek, bir Firma kaydı tablosuna ait ve firmanın varsayılan parametrelerini de içeriyor.

Kodun en altında da unique key tanımı yapılmış. Sanırım fikir alışverişi için yeterli bir örnek olur,

CREATE TABLE [dbo].[IASBAS001](
[CLIENT]                    [varchar](2) NOT NULL,       /* Unique 2. alan olarak seçilmiş */
[COMPANY]                   [varchar](3) NOT NULL,       /* Unique 1. alan olarak seçilmiş */
[STEXT]                     [varchar](80) NULL,
[CITY]                      [varchar](25) NULL,
[COUNTRY]                   [varchar](3) NULL,
[LANGU]                     [varchar](3) NULL,
[HOMECURRENCY]              [varchar](3) NULL,
[ISFINANCE]                 [int] NULL,
[TAXNUM]                    [varchar](20) NULL,
[TITLE]                     [varchar](15) NULL,
[NAME1]                     [varchar](80) NULL,
[NAME2]                     [varchar](80) NULL,
[STREET]                    [varchar](30) NULL,
[STREET2]                   [varchar](30) NULL,
[ZIPSTREET]                 [varchar](20) NULL,
[POBOX]                     [varchar](30) NULL,
[ZIPPOBOX]                  [varchar](20) NULL,
/* Gereksiz kod kalabalığı olmaması için tablonun geri kalanını kırptım ( uğur ) */
) ON [PRIMARY]
GO

CREATE UNIQUE NONCLUSTERED INDEX [IASBAS001_1] ON [dbo].[IASBAS001]
(
[COMPANY] ASC,
[CLIENT] ASC
) WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#4
Merhaba,
Farklı içerik ve soru için teşekkür ederim Uğur Bey.
primary key-PK (Birincil Anahtar): Bir veya birden fazla alandan oluşabilir. Birincil anahtar olarak tanımlanan alan boş değer (Null) içermez ve içerdiği veri tekrarlanmaz.
unique key-UK (Tekil Anahtar): Bir tablo da tekil anahtar olarak tanımlanmış bir alana aynı değer sadece bir kez girilebilir. Birincil anahtardan farklı olarak, tabloda bu alana ait sadece bir kayıt Null değeri alabilir.
O firma kendince (tecrübelerine saygı duyuyorum) bir prensip karar almıştır. Devasa RDBM veri tabanı sistemleri tarafından kabul görmüş, şiddetle önerilen ve Unique'lik konusunun olmazsa olmazına; böyle sade bir yanıt verip, silip atmaları bana mantıklı gelmiyor.
While true do; Hayat döngüsü, kısır değildir! Yapılan bir yanlış, o döngünün dışına çıkmanızı sağlayacaktır.
WWW
Cevapla
#5
Her yiğidin bir yoğurt yiyişi vardır,
Fesih beyin dediği gibi kendilerince bu şekilde uygun görmüşler.
Bana kalırsa hatalı bir tasarım, Tablolara alanları her zaman not null olarak tanımlarım ki sorgularda null mu değilmi diye kontrol için uğraşmıyayım, ayrıca en büyük sorun benzersiz alanların (özellikle diğer tablolar ile ilişkilendirilecek olan alanların yani olması gereken Primary (Uniq) key lerin) integer olarak tanımlanmaması, istisnalar dışında her tablomda ilk alanımı PK tanımlayıp bunun integer ve autoinc olmasını sağlarım ki çakışma olmasın.
Sizin örneğinizde; CLIENT ve COMPANY alanları Varchar ve Uniq tanımlanmış, bu demek oluyor ki bu firmanın detay tablolarının her birinin ilk 2 alanı CLIENT ve COMPANY ve Varchar, Bunun yerine ID integer PK olsa , detay tablolarda da FIRMA_ID olsa daha güzel olmazmı?
Linkleri Görebilmeniz İçin Giriş yap veya Üye Ol
WWW
Cevapla
#6
Bu söz konusu ERP firması, bir kısım geliştirme araçlarını müşteriye bir modül halinde sunuyor. Yani müşteriler kendi iş süreçlerine göre kendilerine özgü ekranlar ve raporlar tasarlayabiliyor. Hal böyle olunca ERP firmasının periyodik olarak yayınladığı güncelleme, yama ve versiyon değişimlerinde de hem kendi, müşteriye standart olarak verdikleri modüllerin güncellenmesi, hem de müşterilerin o modülleri inherit olarak baz aldığı yavru modüllerinde bu güncellemelerden dolayı da etkilenmemesi gerekiyor.

Bunların Primary Key yerine Unique Key kullanmış olmaları muhtemelen bundan dolayıdır diye tahmin ediyorum, fakat orada da Primary Key'in INT değil de biraz (INSERT ve UPDATE ) performansından ödün vererek GUID kullanmaları yine bu sorunu çözebilirdi diye tahmin ediyorum. Çünkü öbür türlü sizin de dediğiniz gibi alt tablolarda tek bir alan ile ifade edilebilecek bir kayıt için silsile olacak şekilde gereksiz yere birden çok alan kullanmak durumunda kalınabilir. Bu durum yukarıdaki tablo yapısında 1 katman alt tablolarda sadece 2 alanı etkiliyorken 2. katmanda 2 alan + ara katmandaki tablonun unique keyleri şeklinde çoğalarak gidecektir.
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#7
Bence tecrubeler sonucunda Boyle bir yapiya gitmislerdir. Bizim dusunduklerimizi onlarida dusunmuslerdir. Sanirim en guzeli imkan olsada onlardan ogrenmek olurdu. Isin arkasinda basit bir is bilmezlik oldugunu dusunmuyorum ben
Cevapla
#8
(07-02-2018, Saat: 12:54)klavye Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye OlBence tecrubeler sonucunda Boyle bir yapiya gitmislerdir. Bizim dusunduklerimizi onlarida dusunmuslerdir. Sanirim en guzeli imkan olsada onlardan ogrenmek olurdu. Isin arkasinda basit bir is bilmezlik oldugunu dusunmuyorum ben


Çok güzel bir noktaya parmak bastınız, işte benim de takıldığım nokta orası, yani bu insanlar bu işi profesyonel olarak yapıyorlar ve tercihlerini bu yönde kullanmışlar. Daha iyisi varken neden böyle bir tercihte bulunmuş olabilirler?
Peyami Safa: "Yaşlanarak değil, yaşayarak tecrübe kazanılır. Zaman insanları değil, armutları olgunlaştırır". 
Can Yücel: "Toprak gibi olmalısın! Ezildikçe sertleşmelisin! Seni ezenler sana muhtaç kalmalı! Hayatı sende bulmalı."
Cevapla
#9
İnternette "primary key vs unique key" araması yaptığımda ilk sayfadaki tüm sonuçlar "Difference between Primary Key and Unique Key" başlığıyla geldi. Ben primary key'i tanımlayacak olsam "uniq özelliğe sahip sıradan bir index" olarak tanımlardım. Hatta bir zamanlar primary key kavramı bana anlatılırken "uniq key de aynı işi görmüyor mu, ne gerek var primary key'e" şeklindeki sorularıma hiç bir zaman tatmin edici bir cevap alamadım.

Bu konuda daha fazla tartışmak yerine bu firmanın sorunun ne olduğuna ve bu sorunu primary key yerine uniq key kullanarak nasıl çözüm getirdiklerine yoğunlaşalım.
WWW
Cevapla
#10
(07-02-2018, Saat: 12:58)csunguray Adlı Kullanıcıdan Alıntı: Linkleri Görebilmeniz İçin Giriş yap veya Üye Olİnternette "primary key vs unique key" araması yaptığımda ilk sayfadaki tüm sonuçlar "Difference between Primary Key and Unique Key" başlığıyla geldi. Ben primary key'i tanımlayacak olsam "uniq özelliğe sahip sıradan bir index" olarak tanımlardım. Hatta bir zamanlar primary key kavramı bana anlatılırken "uniq key de aynı işi görmüyor mu, ne gerek var primary key'e" şeklindeki sorularıma hiç bir zaman tatmin edici bir cevap alamadım.

Bu konuda daha fazla tartışmak yerine bu firmanın sorunun ne olduğuna ve bu sorunu primary key yerine uniq key kullanarak nasıl çözüm getirdiklerine yoğunlaşalım.

ayni aramayi bende yapmistim Smile
Cevapla

Konuyu Paylaş : facebook gplus twitter





Konuyu Okuyanlar: 1 Ziyaretçi