Tekil Tablo Adı


41

Yeni bir veritabanı oluştururken Tablolarımı nasıl adlandırmalıyım?

Tekil: Clientya Çoğul: Clients?


Bir zamanlar masa isimlerinin tekil olması ve isimlerin çoğul olması konusunda ısrar eden bir iş arkadaşım vardı.
René Nyffenegger

1
Başka düşünce okulları var. 1) Sorguların doğal dilde ifade edilmesine izin verecek fiilleri kullanın, örneğin person NAMED 'fred' EARNS 20,000(büyük harflerin tablo olduğu yer). 2) dizi için örn işletmenin adını kullanmak PERSONNEL, PAYROLL, ORG_CHARTvb
onedaywhen

3
Olası çapraz site kopyası: stackoverflow.com/questions/338156/…
Ciro Santilli,

Yanıtlar:


44

Sana bağlı. Sadece olsa tutarlı ol.

Şahsen ben, her bir "sıranın" depoladıklarına göre tekil tercih ederim: Sipariş, Ürün, Kullanıcı, Ürün, vb.

Bu, tekil varlıkları / türleri kullandığım modellememle (Nesne Rolü Modellemesiyle) eşleşiyor.

Düzenle:

Bunun bir nedeni link tabloları olduğunda çoğul başarısız olmasıdır:
Orders, Productsverecekti OrderProductsya OrdersProducts. Hiçbir ses doğru değil

Veya tarih tabloları (elbette bunun için şemaları kullanabilirsiniz):
Orders-> OrdersHistoryveya (hayır!) OrdersHistories? Olmaz Order> - OrderHistorydaha iyi?


2
Her zaman Kişisel seçimine mi düşmeli ? Bir veritabanı tasarımında çalışan 2 kişi varsa, biri masaları çoğul, diğeri tekil olarak adlandırabilir. Geçerli bir akıl için neden kullanılması olarak var mıdır Singularyoksa Plural?
John Isaiah Carmona

2
@JohnIsaiahCarmona: bir sebep ekledi
gbn

3
Tekil kullanımı en mantıklı olarak kabul ediyorum. Buradaki ve SO'daki benzer sorulara bakarsanız, bu popüler görüş gibi görünmüyor. Pek çok insan, programlı olarak tabloları çoğul isimlere sahip olması gereken koleksiyonlar olarak görüyor gibi görünüyor. Belki ORM'lerin insanları bu (kötü) alışkanlıktan kırmaya başlayabileceğini düşünüyorum. Tablolarınızda başlayacak birden fazla isim varsa, üst ve alt gezinme özelliklerini ayırt etmeyi ve bir tablo için örnek ve toplama nesnelerini ayırt etmeyi zorlaştırır.
Joel Brown

4
Tekil lehine başka bir neden ise, örneğin PK TablenameIDveya tablename adından sonra PK adlı bir kuralın olması ya TablenameCodeda tablename_id. Çoğul tablo isimleri ile, Orders.OrdersID(doğru görünmeyen) veya Orders.OrderIDtablo isimleri için çoğul kullandığınız ancak sütun önekleri için tekil olarak değiştirdiğiniz nokta ile bitirdiniz.
ypercubeᵀᴹ

Aynı çizgiler boyunca başka bir nokta .
Jack Douglas,

8

Tekil ve çoğul tablo adlarıyla ilgili olarak, konu tartışmalı görünmektedir, ancak olmamalıdır.

Bir tablo birden fazla kaydın koleksiyonudur, bir tablo içerdiği bir kayıt türünün tanımından sonra adlandırılır. Bir tablonun içerdiği kayıt türünden farklı bir ada sahip olmasına izin verilirse, tabloya çoğul bir ad verebilirsiniz, böylece örneğin birden fazla Çalışan kaydı içeren bir Çalışan tablosu olabilir. Ancak, SQL tasarımcısı tablolar ve kayıt türleri için ayrı adlar sağlamadı.

Bir kayıt türünün adı (ve tablonun uzantısına göre) tekil olarak tutulursa, bir kaydı tanımlamak için kullanacağınız sınıfın adıyla aynı olacağı için, verileri kullanan nesne yönelimli programlar için işler daha mantıklı bir şekilde çalışır .

Daha sonra programdaki bir koleksiyonu tanımlamak istiyorsanız, çoğul veya daha iyisini, EmployeeList veya EmployeeArray gibi uygun bir değiştirici kullanabilirsiniz.

Otomatik kod üretimi için düzensiz çoğullar ve programda çoğulların oluşumu hakkında farklı dil geçmişleri veya fikirleri olan programcılar ile ilgili bir sorun var.

İngilizce dili iyi ve düzgün bir programlama dili değildir ve veritabanı ve program ifadelerinin İngilizceye uymasını sağlamaya çalışmak çünkü bu ifadelerden birini okumak daha iyi bir hatadır.


5

@ Gbn'in cevabı gibi bence bu en çok tercih meselesidir ve onun gibi ben de sizin yaptığınız herhangi bir seçimin her yere uygulanmasını tavsiye ederim (en azından DB'de ). Tutarlılık buna değer.

Ancak benim tercihim, SELECTifadelerde çoğul seslerin daha iyi olması :

SELECT Id, Name, Status 
FROM   Persons
WHERE  Status <> 5  --5 meaning deleted

Yani bu durumda, en azından, masada birkaç kişi var ve bunların bir kısmı müşteriye iade ediliyor.


2
+ 1 teknik olarak çoğul İnsan olmasına rağmen ve bu tekil kullanmamın bir nedeni. Bazı ORM'ler sizin için tabloları otomatik olarak oluşturacak ve dilsel olarak adlandırma mantıklı olmayan bu gibi garip senaryolar elde edeceksiniz.
Mr.Brownstone

5

"sipariş" ayrılmış bir kelimedir. "emir" değil

"kullanıcı" ayrılmış bir kelimedir. "kullanıcılar" değil

"session" ayrılmış bir kelimedir. "oturumlar" değil

"sonuç" ayrılmış bir kelimedir. "sonuç" değil

"göreceli", ayrılmış bir kelimedir. "akrabalar" değil

...

Bunlar iş alanı veritabanına girebilecek ortak kelimeler gibi görünüyor. Çoğul kelimeler tekil kelimelerden daha az anahtar kelimeler olarak görülüyor. Bu nedenle, SQL anahtar kelimelerle çakışmamak için birden fazla tablo adı kullanmak faydalı olabilir.


1
Bu netlik için çok yakın. Ayrılmış sözcüklerden uzak durun, tekil veya çoğul. Bu, birbiriyle değiştirilmiş çok sayıda ayrılmış kelimeyi kullanan hata mesajlarında hata ayıklama yaparken gerçekten yardımcı olur. İdeal olarak, uygulamanın / kullanıcının kullanımına daha alakalı hale getirmek için uygulama alanından kelimeler seçin.
Emacs Kullanıcısı

"netlik için çok yakın" ne demek?
Neil McGuigan

1
Gereksiz bir daha yüksek havai şifre çözme hata mesajı anlamına gelir. Örneğin, sırala ve sözdizimi hata iletilerinde sipariş ver. Veya kimlik doğrulama hata mesajlarında kullanıcı ve kullanıcıları hata ayıklamaya çalışıyor.
Emacs Kullanıcısı

IMO PurchaseOrder, PortalUser, UserSession, Order, User, Session'dan daha iyidir, bu yüzden tekil bu senaryoda iyi sonuç verebilir
John Jai

1

SQL tablosunun çoğul isimleri olması gerektiğine inanıyorum. Sadece çok daha iyi okur.

Bir kitap kayıtları tablosu kitap olarak adlandırılmalıdır. ORM aynı sözleşmeyi kullanmalıdır. Books nesnesi bir koleksiyondur ve ayrıca Books Table'daki tüm kayıtların üzerindedir. Tek bir kaydın yerine bir Book nesnesi.

Bu kodlamayı daha doğal hale getirir.

select name, publication_date from books where publication_date > '2000-01-01';

books = Books()
for book in books.get("publication_date >= '2000-01-01'"):
    print book.name

Seep.get'de koyunlara yazmak zorunda kalana kadar mantıklı gelsin ... Kıvrım kuralları, esnek ol.
Emacs Kullanıcısı

Gerçek bazı kapsayıcılar çoğul benzeri olmayan isimlerden oluşan sözcüklerdir - Like 'access'. ancak biri şu şekilde değişiklik yapabilir: 'erişimde erişim_orcord için'.
dlink

Yine de bağlantı nesnelerini görmek beni biraz zorluyor. Kitaplar ve Yazarlar arasındaki bağlantı tablosuna ne dersiniz? "BooksAuthors" korkunç görünüyor ve ses çıkarırken, "BookAuthor" daha iyi görünüyor ve sesleniyor. Sonra çoğullar (durumlar) için garip sonları olan veya düzensiz isimler olan (çocuklara karşı çocuklar) kelimelere girersiniz. IMO göz ağrıları dünyası!
Blogets

Merhaba, @blobbles çoğul, BookAuthors değil, BookAuthors olur. Bu yüzden hala doğal okuyor. BookPublishers, BookFormats, vb.
dlink

Okunabilirlik her zaman iyidir, ancak bu, veri elde ettiğimiz yerler hakkında bir cümle ile ilgili değildir. örneğin table.field, author.authorNametamamen iyi. Yazar tablosundan yazar adını alın. Sadece bir yazar olduğunda çoğul da kötü görünüyor. authors.authorNamesadece bir yazar olduğunda Bu daha kafa karıştırıcı imo. Tabii ki bu şimdi daha iyi hale getirildi şimdi cümle tarzı mysql_ ile verdik ve verilere erişmek için daha iyi yollar var :)
James

1

Birkaç yıl programlama ile çalıştıktan sonra çoğulculuğun gereksiz bir komplikasyon olduğu sonucuna vardım. Bence, KISS felsefesine göre, bir programcının zaman ve verimlilik nedeniyle tüm sorunlara en tembel ve kolay çözüm için çaba göstermesi gerektiğidir. Böylece tekil, tüm senaryolarda ihtiyaç duyulan daha az çalışmayı sağlar.


Bu cevap tüm konuya gerçekten bir şey eklemiyor! Örneğin, tabloyu "sipariş" olarak adlandırırken problemi cevaplayamazsınız! Şahsen, İngilizce hile yapamadığında Fransızca kelimeler kullanırım - ordre, groupe ... Seçiminizi açıklamak için her zaman tablonuzun yorum alanını kullanın! Ancak, gerçekten önemli olan bir kongre yapmak ve buna bağlı kalmaktır !
Vérace

Nasıl bir şey eklemez? Bence tekillerin daha az iş olduğunu düşünüyorum. Eğer benimkinden farklı bir fikriniz varsa, lütfen düşüncemi değersizleştirmeyin. “Emir” sorun değil, problem daha karmaşıktır, gereksiz çalışmalara neden olan her türlü kombinasyonda yanlış yazılmış gördüğüm “Kategoriler” gibi bir sorun değildir.
ColacX

0

Bu çok kişisel bir şey. 30 yıldır tekil form kullanıyorum. Fakat insanların neden çoğulları sevdiğini anlayabiliyorum. Kitaplar - yazarlar kitapçıların yanlış olmadığını düşünüyorum. Bir kitapta bir veya daha fazla yazar olabilir. Ve yazarlar bir veya daha fazla kitap yazmış olabilir (örneğin birlikte yazılmış). Aynı zamanda birden fazla yazarın yazdığı kitapları nasıl idare ettiğinize de bağlı. Diğer cevaplara katılıyorum; birini seç ve tutarlı ol. Rezerve edilmiş kelimeler ile ilgili konular. Geçici çözüm adları bulmanın zor olmadığını düşünüyorum. kullanıcı -> app_user, oturum -> app_session, sipariş -> customer_order


0

Olayları farklı açılardan görüyoruz ve bence iki kamp şu şekilde tanımlanmaktadır:

Tekil ("kullanıcı")
Tablo adı ile birden fazla satır içerebilen bir kabı temsil ettiği arasında bir ilişki kuran kişi.

Bu yüzden "kullanıcı kabı" birden fazla satır içerebilir.

Çoğul ("users")
Tablo adı ile bu gerçeği arasındaki ilişkiyi yapmayan kişi bir kabı temsil eder. Elbette bir konteyner olduğunu biliyorlar, ama isimde yok.

Örneğin,
bir "yumurta kartonu" içinde birden fazla yumurta olabilir, ancak kap referansının adında olduğu açıktır, bu da birden fazla yumurta için potansiyel sağlar. Bununla birlikte, tekil tablo ismi "user" ile, konteyner referansı isimde yoktur. örneğin, "user_container", çoğul isimleri tercih eden insanlar için büyük olasılıkla kabul edilebilir olacaktır.

Bunun, yıllarca çoğul ortak uygulamalardan ve çoğu çevrimiçi öğretim materyalinden kaynaklandığını düşünüyorum.


Bütün bunlar, teknik olarak tek bir kabı adlandırdığımızdan dolayı tekil konuşmanın daha doğru olduğunu ve kabın birden fazla (veya tek) satır içerebileceğini düşünüyorum.
Adlandırılmış adı verilen kabı içeriğe zihinsel olarak bağlamaktan ziyade, tablonun adını içeriğe (birden çok satır birden fazla ada ihtiyaç duyar) zihinsel olarak bağladıklarında insanlar için yanlış görünüyor (bir kap çoğul için izin verir).

Her zaman olduğu gibi, çoğu zaman doğru ya da yanlış değildir ve bu, senaryoya neyin uygun olduğu ve daha önemlisi ne seçtiğinizle tutarlı olmakla ilgilidir.

Eğer projeyi yalnızca yapıyorsanız ve herhangi bir yöne gitmek için gerçek bir neden yoksa en iyi olduğunu düşündüğünüz şeyi yapın ya da sadece tercih edin. Aynısını dev bir ekipte uygulayın ve sadece oybirliği ile karar verin.

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.