Tabloların sürekli oluşturulması ve silinmesi mimari bir kusurun işareti midir?


11

Son zamanlarda, program geliştirme sırasında, düzenli olarak tablolar ve sütunlar oluşturup düzenli olarak yeni özellikler ve haklı şeyler üzerinde çalışırken ve çevik bir geliştirme süreci kullanırken bunun normal olduğunu söyleyerek bunları sorduklarını belirten bir geliştiriciyle görüştüm.

Arka planımın çoğu bir şelale geliştirme ortamında olduğundan, bunun çevik gelişim altında gerçekten uygun olup olmadığını veya program mimarisinde veya çevik süreci takip ederek altta yatan bir sorunun işareti olup olmadığını merak ediyorum.


Veritabanına bir yorum, son kontrol edildiğinde 700'den fazla tablo var ve diğerleri tarafından "onu yeniden düzenlemek için yeterli zaman yok" sözünü duydum.
rjzii

24
700 masa ve refactor için yeterli zaman yok? Başarısızlığı buraya kadar koklayabilirim.
Adam Crossland

7
700 yetmiş masa ya da birçoğu yetim olan 700 masa?
Ben Brocka

1
@AdamCrossland Cidden ... Lynyrd Skynyrd'ın Ooh O Kokusu akla geliyor. Ancak ciddi bir not olarak, denormalize tablolar bazen ağır okuma yükü olan okuma ağır veya veritabanlarında iyi bir tasarım seçeneğidir.
maple_shaft

1
@maple_shaft Elbette, herhangi bir teknoloji kötüye kullanılabilir, artıları / eksileri tartmak ve test etmek, test etmek, test etmek zorunda olduğunuz başka her şey gibi. Bununla birlikte, tablolarınızı normalleştirdiğinizi fark ederseniz, somutlaştırılmış görünümler size bir teklif sunabilir. Demek istediğim, bir DBA ya da en azından güçlü bir DB-fu ile bir geliştirici sahip olmak için başka bir sebep olduğunu düşünüyorum. En iyi işim kodlama veya tasarım yaparken değil, başkalarının korkunç, korkunç kararlar almasını engelliyor.
Mike Cellini

Yanıtlar:


21

"Agile" kötü düşünülmüş, kaotik, acele ve pantolon koltuk eşanlamlısı haline geliyor her gün benim için giderek daha belirgin hale geliyor. Ve bunların hiçbiri anladığım kadarıyla Agile yaklaşımıyla uyumlu değil.

Etkili ve tekrarlanabilir bir Agile sürecine sahip olmak kolay değildir ve daha iyi ürünlere yol açsa bile, yapılacak toplam iş miktarını doğal olarak azalttığına inanmıyorum.

Eğer veritabanını "yeniden düzenleme" için zamanları olmadığını söylediler, muhtemelen veritabanı için sürüm oluşturma ve taşıma ayarlamak için zaman yok. Muhtemelen bunun için bir dizi fonksiyonel test oluşturmaya zaman ayırmamışlardır. Tüm bunlar, başarıya giden sağlam bir Çevik süreci düşündüğümde düşündüğüm şeyler.

Sonunda, Agile sadece bir kelimedir. Günlük yaptığınız şey başarılı olup olmayacağınızı belirler.


2
Etkili Agile sürecine sahip olmak, her sprint'ten sonra sadece işlevsel yazılım sunmaya tekrar tekrar odaklanılması nedeniyle aslında daha açık bir çalışma anlamına gelmelidir. Doğru yapılırsa başarı şansı artar. Gereksinimlerin durağan olduğunu ve proje kaynaklarının hata yapmadığını varsayarsanız, şelale aslında çok daha verimlidir. Bu çoğu durumda fantezi.
maple_shaft

1
@maple_shaft, aynen öyle. Agile olmak zor işleri yapı ürünlerinden çıkarmaz.
Adam Crossland

2
Bu ekip bir şelale yaklaşımı kullanıyor olsaydı, bu kadar kaotik olurdu ve herhangi bir değişiklik talebi felaket olurdu.
JeffO

İyi dedi, Jeff O.
Adam Crossland

11

Bir tasarım geliştikçe tablolar oluşturmak ve bırakmak olağandışı olmasa da, veritabanınızın gerçekten tüm bu tabloları kullandığından emin olmak için bazı temizleme işlemleri olabilir.

Evet, Agile tamamen yeniden düzenleme ile ilgilidir, ancak şimdi sistemin refactor için çok büyük olduğunu söylüyorlarsa, Agile yapmayı bıraktılar ve şimdi sadece Kovboy programlaması yapıyorlar. Geliştirme ekibi böyle adlandırılmayı sevmez, ancak yaptıkları da budur. Hareket eden her şeyi çekerek menzili sürme.

Bir DBA yardımcı olacaktır, sadece Agile gelişiminin yanı sıra gelişimi anlayan bir DBA aldığınızdan emin olun. Geliştirme ekibinizin hapse atılmaması yerine dizginlenmesi gerekiyor.


5

Genel olarak, programlama ve veritabanı yönetiminin kesinlikle ayrılmadığı bir süreçte genellikle yeni tablolar oluşturmak ve yeni sütunlar eklemek çok normaldir. Yeni bir özellik, bir yere gitmesi gereken yeni veriler oluşturabilir. Bundan kaçınmak için çok sıkı çalışın ve sonunda bir iç platform modeli elde edersiniz .

İyi yazılmış bir yazılım, bu yeni veritabanı nesnelerini neredeyse hiç fark etmez, bu nedenle bazı tablolardaki yeni bir sütun nedeniyle hiçbir şey kesilmez.

Öte yandan, düzenli olarak sütunları ve hatta tabloları bırakmak şüphelidir. Yeni bir özellik hiçbir zaman bir tablonun kaldırılmasına ihtiyaç duymaz, bu yüzden bu tamamen düzensiz çalışan insanların bir işareti olabilir.


1
Yeni tabloların ve sütunların oluşturulması, haklı olduğunda beni rahatsız etmiyor, ancak tabloların (ve bu konudaki sütunların) kaldırılmasının genellikle uygunsuz bir şekilde planlama yapan veya başka birisine karar veren biri nedeniyle bazı işlerin kaybedildiği anlamına geldiği belirtildi. sonuçta bu özelliğe gerek yoktu. Benzer şekilde, tabloların kayma sayısı, içlerindeki normalizasyon eksikliğinden dolayı bir endişe kaynağıdır.
rjzii

Kesinlikle. Çok sayıda tablo için endişelenmeyin, çoğu zaten kullanılmıyor ve belki yakında bırakılacaklar. SCNR
user281377

Sorun şu ki, sadece tek bir kayıt için olsa bile hepsinin kullanılması.
rjzii

4

Veritabanınız kolayca sürümlendirilebilir ve geçirilebilirse ve değişen şeylerin bir şeyleri kırmadığını kanıtlamak için testleriniz varsa, muhtemelen oldukça çevik bir süreciniz olur.

Yorumlar ışığında - genellikle bunların etkisi, kendilerini çevik - çığlık olarak haklı çıkaran bir grup kovboy. Hızlı. Ve dedailywtf.com'a gönderebileceğin her şeyi yayınla, böylece hepimizin dehşetinin tadını çıkarabiliriz.


Üzücü olan şey, veritabanının kolayca sürümlendirilmemesi, taşınmaması ve en iyi şekilde sınırlı testlerin gerçekleştirilmesidir. Geliştiriciler, diğer geliştiriciler tarafından yapılan değişikliklerin üzerine sık sık yazar.
rjzii

5
Kesinlikle o zaman Kovboy programlama. Bu "Agile" çabasının arkasında bir yönetim ekibiniz varsa, bu ekibi Agile'ı kötüye kullandıklarını ve sadece amok koştuğunu söyleyin.
Bill Leeper

1
@RobZ Agile, zayıf birim testi kapsamı ve zayıf veritabanı tasarımı için bir bahane değildir. Kulağa sıcak bir karmaşa gibi geliyor.
maple_shaft

2
öf! sürüm değil !!! bunun bir karışıklık olduğuna şaşmamalı. Uygulama kodunun nasıl olduğunu düşünmek için titreyim.
ozz

4
Temelde bu ekip çevik bir şey yapmıyor, sadece bir AdHoc ekibi. Halihazırda bir yönetim yapısı varsa, anonim olarak veya şahsen zinciri endişelendirebilirsiniz. Onlara veritabanında büyük bir felaket gördüğünüzü, testlerin eksikliğini ve kodu yönetmek için uygun olmayan uygulamaları gördüğünüzü söyleyin. Bu takım büyük bir BAŞARISIZ'a gidiyor.
Bill Leeper

3

StackExchange'teki çoğu cevap gibi, cevap da 'bağlıdır' olmalıdır. Çevik geliştirmede, uygulama sırasında gereksinimler ve spesifikasyonlar keşfedilir.

Bununla birlikte, çevik gelişim göz önüne alındığında, ilişkisel bir model düzgün bir şekilde normalleştirildiğinde, ilişkilere yeni nitelikler eklemek nadiren bir zorunluluk olmalıdır, yeni varlıklar genellikle uygun bir model göz önüne alındığında daha yaşlı olanlara başvurmalıdır .

Çoğu geliştirici zaman kısıtlamaları, tembellik, yetersizlik veya sorgu karmaşıklığı nedeniyle DB'lerini normalleştirmez. Yeniden normalleştirme, mevcut verilerin aktarılmasını, bir risk faktörü oluşturan DAO'ların vb. Değiştirilmesini gerektirir.


Çevik süreçte hangi noktada gelecekteki tüm değişiklik istekleri için uygun model sihirli bir şekilde ortaya çıkıyor?
JeffO

Etki alanını doğru bir şekilde inceledikten sonra. Bir varlığı tamamen tanımlayan sınırlı sayıda özellik vardır. Bazı (giderek karmaşıklaşan) örnekler: 2B nokta tamamen iki koordinatla tanımlanır, adres tamamen bir ülke, alan sürümü ve başka bir varlık tarafından tanımlanan bir adres alanlarının gerçekleştirilmesi (bir ülke kimliği, bir sürüm kullanılarak) ve kısıtlamalar).
Dibbeke

@Dibbeke: Ve sonra AB'ye (27 ülke) X, Y ve Z davalarında tek bir ülke gibi davranmak ya da ABD eyaletlerine ülke gibi davranmak gibi ticari sorunlar yaşarsınız. Ya da bazı DB girişlerinin tek bir adres için 2 adres temsili olduğunu iş fark etme
MSalters

3

Sorunuzu cevaplamak için hayır, bu Çevik bir süreçte normal değil.

Çevik bir tutumdan kaynaklanıyor gibi göründüğü yerlerde , Agile'nin kısa iterasyon tasarım / geliştirme / test döngüsünden ve Agile'nin bilinen gereksinimleri karşılayan, ancak yeni gereksinimleri karşılayabilmek için iyi yapılandırılmış hafif çözümlere yaptığı vurgudan kaynaklanmaktadır. minimal değişiklik. Bu iki şey göz önüne alındığında, bir geliştiricinin neyin aşağı inebileceğini bilmediğini, ancak değişikliğinin bildiklerinin DB'yi geri alınamayacak bir şekilde etkilememesi gerektiğini söyleyebilirsiniz, sadece şemada gerekli değişiklikleri yapar. "en hafif" yol, ve daha sonra aralıklarla "hafif" değişikliklerin bir dizi daha kalıcı ve istikrarlı bir şey yeniden düzenlenir.

Bunu söyledikten sonra, henüz Agile teorisi ve metodolojisine abone olan bir geliştirici ile çalışmadım ve aynı zamanda şemada rutin olarak tablo oluşturmanın ve silmenin herhangi bir nedenle gerekli olduğunu düşündüm. Çevik tokat-çizgi veya cıvata anlamına gelmez. Belirli bir kayda ait yeni bir veri alanının eklenmesini gerektiren bir hikaye verilirse, alanı tabloya eklersiniz. Bu değişiklik bir şeyi bozarsa, nedenini anlarsınız ve gerekli olabilecek diğer değişiklikleri yaparsanız (sorgulanan bir DB'ye bir sütun ekleyerek kırılacak çok az şey düşünebilirim; bu tür bir değişiklikle kırılırsa, daha büyük sorunlarınız var). Yeniden düzenleme normalde kodla sınırlıdır; şemanın değiştirilmesi genellikle kod değiştirmekten daha karmaşık bir süreçtir ve bu nedenle şema değişiklikleri yapılması gerektiğinde, genellikle daha dikkatli bir şekilde yapılır, ve en azından projenin gelecekteki yönünün bilgisine dikkat edildi. Veritabanının bir kısmını veya tamamını yeniden yapılandırmak, tasarımın temel başarısızlığını gösterir; Çevik olmak, programı ve veri yapısını organik olarak oluştururken izlenecek temel mimari ve tasarım kurallarının "ana planı" olmadığı anlamına gelmez.

Şimdi, Agile'da “bildiğiniz” şeyin daha sonra öğreneceğinizle çelişeceği durumlar var. Sisteminizin her Kişi için bir Adrese sahip olması gerektiğini söyleyin. Bu 1: 1 bir ilişki olduğundan ve çoğu durumda verilere ihtiyaç duyulacağından, Adres alanlarını Kişi tablosuna eklemeniz yeterlidir. Bir hafta sonra, bir Kişinin birden fazla Adresine sahip olma zorunluluğu alırsınız. Şimdi bu 1: N ilişkisidir ve düzgün bir şekilde modellemek için, alanları yeni bir Adres tablosuna ayırarak önceki değişikliklerinizi geri almalısınız. Bu, özellikle üst düzey geliştiriciler arasında rutin değildir. Deneyimli bir geliştirici, bir Kişinin bir Adresi olduğunu görür, bunları kavramsal olarak ayrı olarak kabul eder ve Kişiyi Adres ile bir FK referansı arasında bir Adres referansına bağlayan bir Kişi tablosu ve Adres tablosu oluşturur. İlişkinin doğası değişirse böyle bir şemanın değiştirilmesi daha kolaydır; "geniş" veri tablolarının tamamını oluşturmadan veya silmeden, Kişi ve Adres arasındaki ilişki 1: 1'den 1: N'den N: N'ye kolayca değiştirilebilir.


2

Çevik altında çalışırken ön tasarım üzerinde çok fazla odaklanma yoktur, bu yüzden bunu kesinlikle ilk sürüm için büyük bir sorun olarak görmüyorum.

Görmediğim 700 tabloya sahip bir sistem hakkında yorum yapmak zordur, hepsine ihtiyaç duyabilir, ancak veritabanının yeterince iyi yönetilmediği de olabilir.

Çevik altında bile, büyük bir sistem için, şemadan sorumlu birisine / ekibine sahip olmak oldukça yaygındır.


2

Bu tür değişiklikleri sık sık yapıyorlarsa - özellikle canlı uygulamalarda tabloları ve sütunları bırakmak - bu bir deneyimsizlik işareti gibi görünüyor. Takip ettiklerini iddia ettikleri herhangi bir süreçle ilgisi yoktur. 'Çevik' oturmak ve saklamak için gereken verileri ve kodu dışarı atmaya başlamadan önce nasıl bir ilişki olduğunu düşünmemek için bir bahane değildir . İlk yapının% 10-20'sinden fazlasını değiştirdiklerini fark ederlerse, bana bir şey düşünmüyorlar ya da gereksinimleri analiz etme ve veritabanları tasarlama konusunda çok fazla deneyime sahip değiller ve bu yüzden de başlangıçta çok yanlış.


2

Takımınız gerçekten de kovboy kodlaması gibi görünse de, kod VEYA veritabanlarını yeniden düzenlemede gerçekten yanlış bir şey olmamalıdır. Kayıp iş değil - yeni öğrenilen bir gerçekliğe uyum sağlıyor.

Ekibin ihtiyaç duyduğu, değişiklikleri denemek, biraz test yapmak, kullanıcılardan sekmek ve anlamlı olup olmadıklarına karar vermek için bir sanal alan olduğunu öneririm. Bu noktada, mantıklı olan değişiklikleri - yeterli regresyon testiyle - şemanıza entegre etmek iyi olmalıdır.


1

Çevik kodlama ile ilgilidir, Veritabanları kod değildir. Bir veritabanının değiştirilmesi, bir evin yeniden yapılandırılması gibi ele alınmalıdır. İnsanlar bir şekilde çevik araçların şimdi daha sonra planladığı ve tamamen yanlış olduğu inancını aldılar. Çevik yöntemler altında bile planlama için, özellikle veritabanı tasarımı kadar önemli bir şey için zaman verilmelidir.


5
Veritabanları kod değildir, ancak şema bu şekilde ele alınmalıdır. Sürümlendirilmeli ve kaynak kontrolü de yapılmalıdır. Bunu küçümsemek istiyorum ama cevabınızın geri kalanına çok katılıyorum.
maple_shaft

6
Çevik kodlama ile ilgili değildir . Çalışma yazılımı veritabanına bağlıysa, kesinlikle veritabanlarını içeren yazılım geliştirme süreci ile ilgilidir. Bunu söyledikten sonra, Agile'ın 'şimdi daha sonra plan yap' anlamına gelmediği iddiasına katılıyorum.
Eric King

@maple_shaft sadece bir db şeması kod gibi ele alındığı için kod oluşturmaz. evcil hayvanlar insan muamelesi görür, ama onları insan yapmaz
Ryathal

3
Bir şey kod olsun ya da olmasın, planlanması gerekir. Veritabanını değiştirmek, mevcut verilerle ilgili hususlarla birlikte kod değiştirme gibi ele alınmalıdır. Aslında daha fazla düşünce ve planlama gerektirir.
JeffO

1

Son işim böyle bir takımdaydı. Çevik bir işlem kullanırken gereksinimler değişir. Değişiklikler bazen mevcut bir varlığın yeni bir özniteliğe ihtiyacı olduğu anlamına gelir ve bu da varolan bir tablodaki yeni bir sütuna ya da yepyeni bir varlığa ihtiyaç duyulduğu anlamına gelir. Bu tür değişiklikler bölgeyle birlikte gelir ve sadece şemaya dokunmak istemediğiniz için göz ardı edilemez. Başarı, bir veritabanı sürümünden sonraki ve uygun birim testine geçerken verilerinizin bütünlüğünü koruyarak belirlenir.

Şemanızda gereksiz değişiklikler yapmamaya çalışın. Örneğin, bir özellik yeni bir tablonun oluşturulmasını gerektiriyorsa, kontrol etmeden ve test ortamınıza sunmadan önce tablonun tanımından memnun olduğunuzdan emin olun. Verileriniz taşındıktan sonra veritabanı şemanızda yapılan bir değişikliği geri almak acı verici olabilir.

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.