Çirkin bir veritabanına dalmak nasıl?


26

Eminim çoğunuz çirkin bir veritabanıyla uğraşıyorsunuzdur. Bilirsin, normalize edilmemiş bu veritabanı, en önemsiz veriyi elde etmek için büyük bir acı sorgulaması yapmanız gereken o veritabanı, üretimde olan ve biraz değiştiremeyeceğiniz o veritabanı. , "Şu".

Sorum şu, bununla nasıl başa çıkıyorsunuz?

  • Yeni bir veritabanı oluşturmaya çalışıyor musunuz?
  • Pes edip yalnız mı bıraktın?
  • Ne önerebilirsin?

Yanıtlar:


29
  • Yaptığım ilk şey bir Varlık İlişki Diyagramı (ERD) oluşturmak. Bazen meta verileri komut satırı araçlarıyla açıklayabilirsiniz, ancak zaman kazanmak için otomatik olarak bir diyagram oluşturabilecek bazı araçlar vardır.

  • İkinci olarak, her bir tabloyu ve sütunu inceleyin, depoladıklarının anlamını öğrendiğimden emin olun.

  • Üçüncüsü, her ilişkiyi inceleyin ve tabloların birbirleriyle nasıl ilişkili olduğunu anladığımdan emin olun.

  • Dördüncü olarak, özel veri bütünlüğü uygulama veya basamaklandırma işlemlerini anlamak için tüm görünümleri veya tetikleyicileri okuyun.

  • Beşinci olarak, saklı prosedürleri okuyun. Ayrıca, varsa SQL erişim ayrıcalıklarını okuyun.

  • Altıncı, veritabanını kullanan uygulama kodunun bölümlerini okuyun. Bazı ek iş kuralları ve veri bütünlüğü kurallarının uygulandığı yerdir.


güncelleme: Sadece iyi bir kontrol listesi ile " Bir Veritabanını Devraldığınızda Yapmanız Gereken 9 Şey " başlıklı ilginç bir yazı okudum .

Özet:

  1. Yedekler
  2. Araştırma (yukarıda bahsettiğim şema dokümantasyon adımları)
  3. Eski geliştiricilerle konuşun
  4. Bir hata veritabanı
  5. Kaynak kodu kontrolü
  6. Kullanıcılar ve / veya işletme sahipleriyle konuşun
  7. Birkaç şeyi düzelterek veya bazı iyileştirmeler yaparak, kullanıcılara güvenilirlik sağlamak
  8. Bir geliştirme ortamı oluşturun
  9. Eski nesneleri bırak

13

Bu her zaman mümkün değildir, ancak bazı durumlarda benim için çalışan bir şey tabloların bazılarını görünümlerle değiştirmek. Daha sonra altındaki masaları toplayabilir ve bazı durumlarda görüntüleri elden çıkarabilirsiniz. Dediğim gibi, sadece bazı durumlarda çalışır.


Oracle'da Materialized Views ayrıca bu konuda yardımcı olabilir.
Leigh Riffel

9

Veri sözlüğü arkadaşın. Ayrıca, Visio'daki ters mühendislik aracıyla veritabanını tersine mühendislik yapmayı ve kendi şemalarınızı oluşturmayı deneyin. Tersine mühendislik etkileşimli olduğu için - diyagramları oluşturuyorsunuz - veri sözlüğünü okumaktan çok daha ilgi çekici. Sürecin aktifliği onun avantajı ve bunu yapmak için oldukça rahatlatıcı buluyorum.

Yaptığım işlerin çoğu, kaynak sistem veritabanı şemalarının etrafını saran temel bir faaliyet konusu olduğu veri depolama alanında. Bu tür şeyleri pek çok durumda yaptım ve gerçekten iyi çalıştığını gördüm.

Visio pro bu kadar pahalı değildir ve Visio modelleme motoru bir modeli birden fazla diyagram arasında paylaşmanıza izin verir. Bir bonus olarak, diyagramlara eksik yabancı anahtarlar ekleyebilir ve sistemin sonuna kadar yararlı bir dokümantasyon seti elde edebilirsiniz.


6

Bill Karwin'in fikirlerine ek olarak, kullanıcılarla konuşmayı öneriyorum - bazen kullanıcılar, özellikle de herhangi bir raporlama yaparlarsa, veritabanlarının ne için kullanıldığı hakkında biraz bilgi sahibidir.


6

Bir satıcının yazılımı için çok çirkin bir şeyle uğraşıyorum, bu da önerilerde bulunmaktan başka bir şeyi değiştiremem. Her zaman bir şeyleri değiştirmeye zorluyorum, ama kontrolüm dışında olduğu için, ıvır zıvırla sıkışıp kaldım.

Hızlı bir şekilde kullanmaya başladığım şeylerden biri, veritabanının kesinlikle bir ilişkisi olmadığı için şema için genel bir Ad sorgusu:

--Find Column named like 'blah' in a specific table
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V') AND O.Name like '%TableName%'
ORDER by O.Name

veya

--Find all Columns in DB with name like 'blah'    
SELECT O.NAME, O.ID, C.NAME, O.XTYPE
FROM SYSOBJECTS O LEFT JOIN SYSCOLUMNS C ON O.ID=C.ID
WHERE C.NAME LIKE '%SearchFor%' AND O.XTYPE IN ('U','V')
ORDER by O.Name

Tabloların bazıları çok fazla adlandırılmamış sütun içerdiğinden ve tablo arasında ilişkiler oluşturmak için ne kullanabileceğimi bulmak için arayabileceğiniz çok fazla sütun var.

Bunun sorunun yeniden tasarlanma bölümünde pek bir faydası olmadığını biliyorum, ancak kötü şemanın anlaşılması ve çözülmesinde çok yardımcı oluyor.


6

SchemaCrawler , çirkin bir veritabanını keşfetmeyi kolaylaştıran birkaç özelliğe sahip veritabanı keşif aracımdır . SchemaCrawler, düzenli ifadeleri kullanarak tabloları ve sütunları aramanızı sağlayan "grep" benzeri bir işlevselliğe sahiptir. Örneğin, adlarının bir parçası olarak "ACCOUNT" olan tablo ve sütunları arayabilir ve muhtemelen bir şekilde ilişkili olurlar.

SchemaCrawler ayrıca yabancı anahtar olmadığı durumlarda bile yabancı anahtar ilişkilerine neden olur. Bunu, tabloların isimlerinin genellikle çoğul olduğu, ancak sütun isimlerinin olmadığı ve sütun isimlerinin _ID önekine sahip olabileceği gibi, ortak isimlendirme kurallarını kullanarak "zayıf ilişkileri" bularak yapar. Bu çıkarılan ilişkileri kullanarak ilgili tabloları bulabilirsiniz.


5

Ne kadar çirkin olduğuna ve tasarım üzerinde ne kadar kontrole sahip olduğunuza ve onunla neyin etkileşime geçtiğine bağlı. Şu anki işimdeki yıllar boyunca çirkin veritabanlarıyla etkileşime girmek zorunda kaldım ve işte bunlarla nasıl başa çıktım:

Çalışan Verileri

Çalışan verilerini tutan veritabanı var. Onun bir satıcı veritabanı, bu yüzden üzerinde hiçbir kontrolüm yok. (Un?) Neyse ki, doğrudan erişemiyorum. Her sabah bir DTS dökümü alıyorum.

Yönetebildiğim en iyi şey, girdiyi sabah çöplüğünden temizleyen bir senaryo yazmak (evet, kelime seçimi kasıtlıydı) ve daha kullanışlı bir formata geçirmek ve temizlenen verilerden çalışmak.

Bunu değiştirebilseydim bile, muhtemelen yapmazdım - sadece olduğu gibi kurulmasına dayanan çok sayıda başka program olduğu için ve onların içinde bir değişiklik yapmaya zorlayamam.

Çevrimiçi Eğitim Verileri

Bu kendi tasarımımın bir karmaşasıydı. Bana yardım edecek akıl hocası olmadan kolejden yeni çıktım ... O zamandan beri biraz tamir ediyordum. Verilere erişen tek programı kontrol ettiğimden, sitenin bölümlerini yükseltirken veritabanının yapılandırmasını "yükselteceğim". Bir dönüşüm betiği yazıp bunu bir kopya üzerinde kuvvetlice test edeceğim, böylece yapılması gereken tüm değişikliklerin yapıldığından emin olabilirim.

Uzun bir süreç oldu, ama güzel bir şekilde geliyor.

Sınıf İçi Eğitim Verileri

Pilot projem, bir veya iki tane programlama dersi alan bir hemşire eğitimcisi olan selefimin biraz farklı tasarladığı 3 farklı veritabanındaki verileri birleştiriyor.

Bu başka bir yavaş işlem oldu. Verilere erişen programlar üzerinde tam kontrol sahibi olduğum için, çevrimiçi eğitim verileri gibi onu biraz değiştirdim.

Geçmişe bakıldığında, bu temiz başlamak için önemli bir aday olurdu ... arka görüş her zaman 20/20.

Sonunda...

Bunun ne kadar yararlı olduğunu bilmiyorum ve daha fazla ayrıntıya girebilirim (bir noktaya kadar, şirketin yasal ya da hepsine). Son cevap "Bağımlı" dır.


5

Bu yüzden tüm cevaplarını okuduktan sonra, sana benimkini verdim:

Önce "Ana Tablo" yu aradım, sonra kalem ve kâğıtla, diğer tablolarla ilişkileri eşleştirmeye başladım, bundan sonra eğer bakacak bir uygulama kodu varsa, verilerin nasıl aktığı hakkında bazı eskizler yapmaya başlıyorum.

Db'nin nasıl çalıştığı ile ilgili güzel bir resim çektikten sonra, sadece bir şeyleri değiştirmek için yerlere bakmaya başladım. Bu kadar.

Nedenini bilmiyorum ama herhangi bir veritabanı modelleme yazılımı yerine kağıdı tercih ediyorum.


5

Harici uygulama tarafından kullanıldığından, veritabanı "arayüzünü" değiştiremezsiniz. Ne tür bir veritabanı kullandığınızı bilmiyorum (oracle, mysql, mssql), ancak bunu yollardan biri olarak görüyorum:

  • Bu tür nesnelerin görünüm ve saklı yordamlar olarak kullanılmasıyla veritabanı arayüzü oluşturulması.
  • adım adım yeniden düzenleme (normalleştirme, alan yeniden adlandırma ...)
  • Müşterinin başvurusunu değiştirmek (gerekirse)

Görünümler, saklı yordamlar iç veritabanlarındaki değişiklikleri gizleyecektir (değişiklikler).


4

Veritabanının yapısını keşfetmeye ek olarak, veri kalitesine bakmanın da önemli olduğunu buldum . Her sütunun anlamını anladıktan sonra, birçok eksik değerin olduğu yerleri arayabilirsiniz. Verilere daha aşina hale geldikçe, farklı sütunlardaki değerler arasında tutarsızlıkların nerede olduğunu da inceleyebilirsiniz.


4

Nasıl etkileşime girmeniz gerektiğine bağlıdır. Gruplandırmanın kabul edilebileceği kullanım senaryoları için, verileri daha kolay bir yapıya ayırmanın ve buna karşı çalışmanın en uygun maliyetli olduğunu (geliştirme süresi ve dolayısıyla müşteriye maliyet açısından) oldukça düşük maliyetli buldum.


4

Sorunu beyninizi dolaştırabileceğiniz sorunlara bölerseniz, aynı anda bunlara saldırabilirsiniz. Bazen, sadece kızdırılmayan bir masa olduğunu bilmek size çalışmanız için bir plaj başı verebilir. Bu yolla, "temiz noktanızı" genişleterek veritabanındaki parçaları daha da kapsayacak şekilde genişletirsiniz.


4

Visio'nuz varsa (Microsoft Office'in bir parçası) reverse engineer işlevini deneyebilirsiniz . Güzel değil, ama en azından size bir başlangıç ​​verecektir (Rational Rose gibi "gerçek" araçların maliyetinin bir kısmıyla).



3

Bill mükemmel bir cevap verdi. Kullanıcı arayüzüne test kullanıcısı olarak giriş yapacağımı ve kullanıcıların verilerle tam olarak ne yaptığını anlamaya çalışacağımı eklerdim. Depolanan bazı işlemlerin veya tasarımın neden ardında yatanı anlamanıza yardımcı olacaktır. Verilerin ne anlama geldiğini ve ne için kullanıldığını anlamak, bir veritabanını anlamak için önemlidir.

Veritabanının bir işletme işlevi veya konusu varsa, genel olarak aşina olmadığınız (uçuş planlaması yapar ve daha önce yalnızca finansal uygulamalar üzerinde çalıştığınızı söyleyin), kullanıcılardan konuyla ilgili bazı okuma materyalleri isteyin veya kütüphaneye gidin. konuyu kendiniz veya İnternet’te arayın. Kullanıcılara, bilmeniz gereken yasal veya düzenleyici sorunlar olup olmadığını sorun. Yine bu konu arka planının bir kısmı, tuhaf tasarım seçimlerinin neye benzediğini açıklayabilir.


3

Eğer bir satıcı veritabanı ise (ve bazı çok kötü olanlar gördüm), tüm yapabileceğiniz şey satıcıya bu konuda şikayette bulunmak.

Evde yapılan uygulamalar için genellikle geliştiricilere biraz eğitim verilir ve şemanın değiştirilmesini sağlayarak performansın iyileşmesini sağlayabilirsiniz. Zaman alır ve genellikle yavaş bir işlemdir.

Tecrübelerime göre, yeni bir veritabanı oluşturmak gerçekten bir seçenek değil, çünkü yüzlerce GB veya TB verilerini taşımak o kadar da mümkün değil.

Onu yalnız bırakmak da genellikle bir seçenek değildir. Veritabanındaki veri miktarı arttıkça performans daha da artar ve daha da kötüye gider (zaman zaman ortaya çıkan sorunları görüyorum, genellikle çok kötüdürler). Sonunda kullanıcılar performansı kullanamadığı için uygulamayı kullanamayacaklar.


3

Ah ... Çirkin veritabanı, Büyük işletme bulacağımız daha eski veritabanları.

  • Performansı ayarlamak, performans sorunları bulana kadar bu tür veritabanlarından şikayetçi olmaz. Bu yüzden organizasyonumuzda bireysel sorguları tespit ediyor ve bunları bir düzeltme eki olarak ayarlıyoruz.
  • Artık verileri sınırlandırıyoruz , kokmuş çöpün nerede olduğunu biliyoruz, bu nedenle bu tür veritabanlarından veri akışını önlemeye çalışın. Hazırlama veritabanları oluşturun ve verilerinizi başlangıçta kullanmak ve veri dökümleri olarak kullanmak için verilerinizi bu tablolara yönlendirin.
  • İstifte Olma Verilerinden Kaçının Artık gerekmeyen eski verileri arşivle / kes. Bir veritabanında verinin ne kadar gerekli olduğuna karar veren bir ekip bulunmalıdır. Bundan sonra düz dosyalara veya hatta teyp sürücülerine taşıyabilirsiniz.
  • Bunu aşamalı veri yönlendirmeyi ve kesme elde edebilirsiniz kez. Diğer ekipleri yeni veritabanını kullanmaya başlamaya ikna edin.

Her zaman işe yaramıyor ama eğer çaba göstermezsek, daha da kötüye gidecek. Veritabanlarını uygulamalarla birlikte yeniden tasarlamaya çalışıyorum, veri taşıma işleminde benim için daha fazla iş ekleyebilir, ancak performans her zaman şapkamdan çıkardığım sihir numarasıdır.

Çirkin kız arkadaşınla iyi şanslar;)


2

Bilgi Aktarımı oturumu seçeneğinin sizin için uygun olup olmadığına bakın ve öyleyse tam olarak yararlanın.

Ayrıca, birçok DBMS veritabanı şemasını bazı yararlı bilgilerle (örneğin, yabancı anahtarlar) çizmenize / yazdırmanıza olanak sağlayan araçlarla birlikte gelir.

Ek olarak, (NXC'den çalınmış), veritabanını Visio gibi araçlarla tersine mühendislik yapabilirsiniz.


2

Bir sorgu profili oluşturmayı ve bir üretim sisteminde neler olup bittiğini izlemeyi seviyorum. Bana hangi tabloların 'sıcak' olduğu ve onlara karşı ne tür sorgular olduğu hakkında bir fikir verir.


1

Bir sanal alan sunucusuna yedek bir kopya koyun ve ardından test sorguları yazmaya ve çalıştırmaya başlayın. Her zaman ellerimi ele geçirip, kırmaktan endişe etmemeyi kolaylaştıracak karmaşık bir sistemi buluyorum.

Ayrıca, The Daily WTF'in bir tarayıcı penceresinde açık olmasını seviyorum . Başkasının tasarımını devralmak genellikle "Çokça {WTF} yaptıklarına inanamıyorum" anlarından oluşur ve insanların acınızı anlayabileceği bir yere gitmeye yardımcı olur.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.