İş arkadaşım 96 sütunluk bir SQL tablosu oluşturdu


23

2010'da 4 ya da 5 yıllık yazılım mühendisleri veya 96 fracking kolonlu masalar tasarlıyoruz.

Ona kabus olacağını söyledim.
Ona MySQL'i C # ile bağlamak için sıradanları kullanmamız gerektiğini gösterdim.
Satırlardan daha fazla sütun içeren tabloların çok büyük bir koku olduğunu açıkladım.

Yine de, "Bu şekilde daha basit olacak" alıyorum.

Ne yapmalıyım?

DÜZENLE *

Bu tablo sensörlerden gelen verileri içerir. Dynamic_D1X Dynamic_D1Y
ile sensör 1'e sahibiz [...]


Dynamic_D6X
Dynamic_D6Y
[...]

EDIT2 *

Sonunda o işten ayrıldım. Diğer programcının aylarca aylarca kararmaya başladığının bir işareti, yönetimin bunun bir sorun olduğunun farkına varmadığı bir başka işaret


5
Uggh, karanlık çağlar kadar iyi olabilir. İnsanlar veritabanlarını nasıl kullanacaklarını ne zaman öğrenecek?
ChaosPandion

49
Alternatifin nedir? Eğer bir çözümünüz yoksa, sadece bir sorun karşısında öfkelenemezsiniz.
TGnat

1
Her sırada ne depolandığını merak ediyorum.
MetalMikester

1
@ChaosPandion, yalnızca geleneksel veritabanlarının kullanımından çok sonra, bir tasarım kokusudur.
instanceofTom

3
Belli ki veritabanını fazla abartıyor. Sadece 4 varchar sütunu olan tek bir masa içeren bir veritabanımız vardı: CLASS, OBJECT, ATTRIBUTE, VALUE. Tüm veriler oraya sığacak. Bunun üstesinden gel! :)
Lukas Eder,

Yanıtlar:


32

Belki de performanslar veya yatırım getirisi gibi iyi bir nedenden dolayı bunu yaptı? .

Yapılacak en iyi şey ona sorular sormak. Belli bir miktar "neden" ile, kesinlikle onu (muhtemelen öyleyse) kendi başına büyük olasılıkla yanlış olduğunu anlamasını sağlayacaksınız.

Performansla ilgili değil, yatırım getirisiyle (YG) ilgili bir davam vardı. Haftanın her saati için belirli bir değeri olan nesneler içeren bir masa vardı (haftada 168 saat). Değeri içerecek bir ObjectHour tablosu oluşturma seçeneğimiz vardı, aynı zamanda Object'in ve saat sayısının gün sayısı için bir anahtar. Ancak 168 değeri de tam üst sıraya koyma fırsatımız oldu. Muhtemelen meslektaşının yaptığı gibi.

Geliştiriciler her iki çözümü de tahmin ettiler. Basit çözüm (168 sütun), iyi tasarlanmış bir meslektaşı yapmaktan çok daha ucuzdu. Müşteri için aynı sonuç için.

Güvenlik gibi daha önemli konulara yönelik çabalarımızı odaklamak için basit / en ucuz çözüme gitmeye karar verdik.

Gelecekte bunu geliştirmek için birçok fırsatımız olacak. Pazar zamanı, bizim için önceliğiydi.


3
Kabul ediyorum - “neden” e ek bağlam olmadan, sütunların sayısı gerçekten önemli değil. İzlenmesi gereken 96 şey olabilir ... ya da başka tablolara bölünmesi gereken veri dizileri için ek sütunlar kullanıyor olabilir (isim_1, isim_2).
GrandmasterB

Oh, bana bir şeyi hatırlattırıyorsun ... Cevabımı ekleyeceğim

1
"normalize" mutlaka "iyi tasarlanmış" anlamına gelmez. Burada tarif ettiğiniz denormalizasyonu mükemmel bir tasarım kararı olarak kabul ediyorum.

1
@GrandmasterB ile tamamen aynı fikirdeyim. Sütun sayısı bağımsız olarak değerlendirilebilecek bir şey değildir. Tek bir şeyle ilgili büyük miktarda ilgili verinin depolanması gereken zamanlar vardır. İnsanlar ne yapmalı? Etiketli bir veri tablosu (id, tag, value)ve INSERTdoksan tek satır mı? Bilgi bir tabloya aitse ve haklıysa, o zaman korkunç bir performans sorununa neden olmadıkça sütun kalır.
Orbling

+1 Bazı uygulamalar için denormalizasyon gerekli. Veritabanlarının elektronik tablo olmadığını iddia ediyorum. Sadece benzer bir tablo formatına sahip olmaları, mutlaka veritabanlarının insan tarafından okunabilir olması gerektiği anlamına gelmez. Onlar bir veri arka uç depolamasıdır ve böyle ele alınmalıdır.
Evan Plaice

17

Ne yazık ki, ortalama geliştiriciniz hala ilişkisel veritabanlarını büyük dosyalar olarak düşünüyor. İyileşmeleri için tek yol, birileri kontrol altına almak ve örnek yol göstermek. Kısa bir süre önce veritabanımızdaki önemli bir şemanın yeniden tasarlanmasına öncülük ettim ve ortak ilişkisel uygulamaları takip ettim. Birdenbire sakladığımız prosedürler daha şıktı ve uygun endekslerin tümü, bunun için doğmuş gibi yerlerine oturmuş görünüyordu. Ego güdümlü geliştirici kanıt olmadan size asla inanmayacak.


2
Bazen, zaten haklı olduğuna ikna olmuş birini ikna etmek kanıt gerektirir. +1
Chris

1
Gerçekten mi? Ortalama bir geliştirici bunu mu yapıyor? Amanın.
webbiedave

Belki de büyük düz dosyalar ilk etapta ihtiyaç duydukları şeydir;)?
İş

illa ki ego değil, ama neden değişmelisin? Yeni şeyler , onu kullanmak için harcanan zaman ve çaba için "ödeme" yapmak için çok daha iyi olmalıdır .

-1 denormalize bir veri tablosu kullanmak için tamamen geçerli sebepler var. Örneğin, veri kümesi çok büyüdüğü için ya da çok düşük gecikmeli erişim süresine ihtiyaç duyduğunuz için (birleştirme işlemine elveda deyin), birçok sunucuda bunu kırmanız gerektiğinde.
Evan Plaice

11

Benzer bir şey daha önce StackOverflow'ta tartışılmıştı .

Genel olarak, bir masada çok fazla sütun olması mutlaka yanlış bir şey yaptığınız anlamına gelmez, ancak kesinlikle bazı kırmızı bayraklara işaret etmeli, bu nedenle tasarıma yakından bakmalısınız. Bazen büyük bir masa doğru seçimdir, ancak çoğu durumda diğer alternatifler daha anlamlı olur. Örneğin, bir seçenek depolamayı iki tabloya bölmektir: bir varlığınızı tanımlayan bir tablo ve bu varlıkları tanımlayan özniteliklerin anahtar / değer deposunu etkin bir şekilde tanımlayan başka bir tablo (bu nedenle en fazla 96 satıra sahip olabilirsiniz)Her varlık için). Başka tasarımlar da mümkündür. Ekip arkadaşlarınızla konuşun ve veri normalleştirmesine, kod okunabilirliğine ve bakımına (doldurulacak 96 özellik içeren ifadeler ekleyin?), Performans etkilerine, ne kadar sıklıkla yeni özelliklerin (sütunların) eklenebileceğine, ne kadar seyrek olduğuna bağlı olarak hangi çözümün daha iyi olduğunu bulun Veriler (96 sütunun kaç tanesi doldurulacak ve kaç tanesi NULL kalır?) ve raporlama üzerine etkileri. Herhangi bir geliştirici tasarım kararlarını makul bir şekilde haklı çıkarabilmeli ve maliyet / fayda ticaretinin (ve evet, her tasarım kararının değişmemesi) lehine olduğunu gösterebilmelidir. Sorumluluğunuz, şikayet etmek veya eleştirmek değil, alternatifler önermek ve bu konular üzerinde düşündüklerinden emin olmaktır.


1
anahtar değer depoları, performans ve sorgulanabilirlik için neredeyse en kötü seçimdir.
HLGEM

8
Detaylandırmak ister misiniz?
Yevgeniy Brikman

9

96 sütunla normalleştirildi mi? 1., 2., 3. vs NF'yi karşılar mı?

Varlık için 96 ayrı özelliğiniz olabilir.

Aksi takdirde, Simple Talk'ta Joe Celko'yu okumasını sağlayın


5

Tamamen bağlıdır.

Normalleştirilmiş / normalize edilmemiş DB tasarımlarının hem avantajları hem de dezavantajları vardır.

İlk DB tasarımım normalleştirilmiş bir güzellikti. Esnek ve genişletilebilirdi. Aynı zamanda kod seviyesiyle uğraşmak dışında kendim dışında herkes için inanılmaz bir PITA idi ve benim için hafif bir PITA idi.

Bir sonraki girişimim düz bir yapıydı ve (a) çok daha hızlı ve (b) kodlanması çok daha kolaydı. Ve daha sonra normalleştirmek için büyük bir angarya olmayacak.

Bu yüzden bir koku olabilir, ancak başka bir DB tasarımının da hoş bir koku dizisi olacaktır.


+1 Sık sık belirtmek için doğru bir yol yoktur.
Orbling


1

(Düzenlenmiş) gönderiye baktığımızda, bunun kötü bir şekilde denormalize edilmiş bir masa olduğu açık. Ne yapmalısın? Gördüğüm gibi, birkaç seçeneğiniz var:

  1. İşini nasıl yapacağını öğrenmek için iş arkadaşına bağır. Üretken olma ihtimalinin düşük olması ancak diğer iş arkadaşlarınızı sizinle karıştırmamaya ikna edecek. Çığlık atan bir manyak olarak ün yapmak yararlı olabilir (bana nasıl bildiğimi sorma).
  2. Patronda, iş arkadaşının bir aptal olduğunu bağır. Afeti tahmin et, sonra aktif olarak sabotaj projesine çalış. Beceriksiz iş arkadaşınız tarafından üretilen veritabanı tasarımındaki her şeyi suçlayın. Doğrudan yol açabilir ...
  3. Çıkın. En iyisi senin fikrin olsa da, # 2 istemsiz istifaya yol açabilir. Öfkeli patron ve / veya iş arkadaşları tarafından pencereden fırlatılırsa, asfalt / beton / çakıl üzerine dizleri çizmemeye çalışın. (Not önceki çalışma patronlar ofis zemin üzerindedir belirgin eğer hayatta kalma azalma şansınız. Burada ÖNEMLİ olduğunu ve kendinizi pencereden dışarı bedensel itilirken bulabilirsiniz. Planı öncesinde !! )
  4. Ağır bir şekilde iç - ya da Kaliforniya'ya taşın ve aydınla (perv. 19 (ya da her neyse) geçtiğini varsayarak. İş arkadaşlarına bakış açısını geliştirmek için bir kaç atış ve bir doobie gibisi yoktur (ya da öyle duydum). (Kamu hizmeti duyurusu: ÇOCUK! Bu insanlar profesyoneldir! Bunu evde denemeyin!)

Paylaş ve Keyfini çıkar.


# 4'ü denedim ama şimdi pazartesi ve iş yerine ulaştığımda her şey geri dönecek =)
Eric

Birinci noktayı oku. Upvoted. İkinci noktayı oku, oyumu değiştir. Cidden dostum?
Zoran Pavlovic

0

Buradaki uzuvdan çıkacağım ve bu "Yeni" tabloyla çalışmak için bir çok kodu kesip yapıştıracağını varsayacağım.

Eğer öyleyse, muhtemelen herhangi bir ek teknik borç almayacaksınız. Sadece teknik borç payını paylaştı ve bazı şeylerin büyük bir şekilde birleşmesi yolunda iyi olabilir.

96 sütunlu bir şey gerektiren bazı denenmiş ve gerçek bir metodoloji varsa, bu özel durumda bunu yapmanın gerçek faydalarını göz önünde bulundurun. Eğer hiçbiri yoksa, ona şüphenin avantajını verin, ancak bir dahaki sefere bir dahaki sefere aptalca bir hareket olarak düşündüğümüzü yaptığınızda, planlama aşamasında olmak istediğinizi hatırlatın.


0

Şemaya erişecek olan uygulamanın kullanım durumlarına, her seferinde hangi veri yığınına ihtiyaç duyulduğuna bağlıdır. Bir şekilde masa tasarımını haklı gösterebilir.


0

Onu taş çağlarına gönderip dosyaları kullanmaya ya da en azından BLOB'ları nasıl kullanacağını öğretmeye zorlardım.

Gerçekten, 96 sütun ... Bu doğru olamaz, asla. Belki bir ORM yardımcı olabilir. (Performansa ihtiyacınız olmadığı sürece, ancak bunu yapması için DB'yi daha iyi anlayan birine sahip olabilirsiniz)


0

Bunun için tüm cehenneme düşürüleceğim, ancak bu yüzden mağazamdaki veri modelleme ve yazılım mühendisliğinin sorumluluklarını ayırdım. Programcılar nadiren setler şeklinde düşünürler ve bunun yerine veri kullanımına odaklanırlar (3. normal form, indeksleme veya diğer DB performans konularını korumak yerine). Biz programcılar olarak, saf veri modelleme / mimari konularındaki deneyimsizliğimize dayanarak, DB mimarlık kararları konusunda belki de gerekenden daha fazla aynı fikirde değiliz. IMHO, gereksinimleri karşılayan, tablo / procs / vb. Oluşturan veri mimarlarına ve modelleyicilerine sahip olmamdan ve çıktıları bana bırakarak ilgilenmekten hoşlanıyorum.

Yine de bu tasarımın gerçek nedenlerini bilmeden (96'dan fazla farklı sayısal çıktıya sahip hava sensörleri = çok sayıda tablo sütunu üzerinde çalıştım) ... bu sadece bir hayvan gözlüğünü havalandırmak gibi görünüyor.

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.