Множина проти назви одиничного числа


41

Як я повинен називати свої таблиці під час створення нової бази даних?

Однини: Clientчи множини Clients:?


Колись у мене був колега, який наполягав на тому, щоб назви таблиць були однинами та переглядали назви множини.
Рене Ніффенеггер

1
Є й інші школи думки. 1) Використовуйте дієслова, які дозволять виражати запити природною мовою, наприклад person NAMED 'fred' EARNS 20,000(де великі імена - таблиці). 2) використовувати ім'я підприємства для безлічі , наприклад PERSONNEL, PAYROLL, ORG_CHARTі т.д.
onedaywhen

Відповіді:


44

До вас. Просто будьте послідовні, хоча.

Особисто я віддаю перевагу однині на основі того, що зберігається кожен * рядок: замовлення, товар, користувач, товар тощо.

Це відповідає моєму моделюванню (за допомогою моделювання рольових об'єктів), де я використовую особливі сутності / типи.

Редагувати:

Однією з причин є те , що множина зазнає невдачі , коли у вас є таблиці посилань:
Orders, Productsдав би OrderProductsабо OrdersProducts. Ні звуки правильні

Або таблиці історії (звичайно, ви можете використовувати схеми для цього):
Orders-> OrdersHistoryабо (ні!) OrdersHistories? Чи не Order-> OrderHistoryкраще?


2
Чи завжди це зводиться до особистого вибору? Що робити, якщо в одному дизайні бази даних працювали 2 людини, то одні можуть називати таблиці множиною, а інші - однини. Чи немає вагомих міркувань щодо того, для чого використовувати Singularабо Plural?
Джон Ісая Кармона

2
@JohnIsaiahCarmona: додав причину
gbn

3
Я погоджуюсь в тому, що в однині є найбільш розумним. Це, здається, не є популярною думкою, якщо ви озираєтесь на подібні питання тут і на ТА, і т. Д. Багато людей, схоже, сприймають програмістські таблиці як колекції, які повинні мати назви множини. Я думаю, що, можливо, ORM можуть почати ламати людей цієї (поганої) звички. Якщо ваші таблиці мають множинні імена для початку, це важко розрізнити властивості навігації батьків та дітей та розрізнити об’єкти та об’єкти колекції для таблиці.
Джоел Браун

4
Ще одна причина на користь однини , якщо у вас є правило , що PK названий в честь ім'я_таблиці, наприклад , TablenameIDабо , TablenameCodeабо tablename_id. З іменами множини множини ви закінчуєте Orders.OrdersID(що не виглядає правильно) або Orders.OrderIDтам, де ви використовуєте множину для імен таблиць, але змінюєте на сингулярне для префіксів стовпців.
ypercubeᵀᴹ

Ще одна точка вздовж тих же ліній.
Джек Дуглас

8

Що стосується однини та множинних назв таблиць, тема видається суперечливою, але цього не повинно бути.

У той час як таблиця - це сукупність декількох записів, таблиця називається за визначенням одного типу записів, який вона містить. Якщо в таблиці було дозволено інше ім'я, ніж у того типу запису, який вона містить, ви можете дати таблиці множинне ім'я, щоб ви могли, наприклад, мати таблицю «Співробітники», що містить кілька записів працівника. Але конструктор SQL не передбачив окремих імен для таблиць і типів записів.

Речі діють більш логічно для об'єктно-орієнтованих програм, які використовують дані, якщо ім'я типу запису (і за допомогою розширення ім'я таблиці) зберігається єдиним, оскільки воно буде відповідати імені класу, який ви використовували б для опису одного запису .

Якщо ви хочете визначити колекцію в програмі, ви можете використовувати множину або, краще, використовувати відповідний модифікатор, такий як EmployeeList або EmployeeArray.

Існує також проблема з неправильними множинами для автоматичного створення коду та програмістів, які мають різний мовний фон або уявлення про формування множини в програмі.

Англійська мова не є хорошою і належною мовою програмування, і намагання зробити так, щоб заяви бази даних та програми відповідали англійській мові, оскільки звучить краще, щоб прочитати одне з цих тверджень - помилка.


5

Так само , як @ ГБН - х Відповідь я думаю , що це саме питання переваг і так само , як він , я рекомендую , щоб будь-який вибір ви зробили, застосовувати його скрізь (в тому , що БД , по крайней мере). Консистенція того варта.

Однак моя перевага полягає в тому, що множина краще звучить у SELECTвисловлюваннях:

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

Я маю на увазі, що в цьому випадку, принаймні, в таблиці є кілька осіб, і кілька з них повертаються клієнту.


2
+ 1, хоча технічно множина Особи - це Люди, і це одна з причин, що я використовую однину. Деякі ORM автоматично створюють таблиці для вас, і ви отримуєте такі дивні сценарії, як цей, коли лінгвістично називання не є логічним.
Містер Броунстоун

5

"замовлення" - це застережене слово. "наказів" немає

"користувач" - це застережене слово. "користувачів" немає

"сесія" - це застережене слово. "сеансів" немає

"результат" - це застережене слово. "результати" немає

"родич" - застережене слово. "родичів" немає

...

Вони здаються звичайними словами, які можуть входити в базу даних про бізнес. Множинні слова здаються менш поширеними як ключові слова, ніж однини. Тому може бути корисним використовувати множинні назви таблиць, щоб уникнути конфлікту з ключовими словами SQL.


1
Це занадто близько для ясності. Просто тримайтеся подалі від зарезервованих слів, однини чи множини. Це дійсно допомагає при налагодженні повідомлень про помилки, які використовують безліч зарезервованих слів безперешкодно. Ідеально виберіть слова з домену програми, щоб зробити його більш релевантним для використання / користувача.
Користувач Emacs

що означає "занадто близько для ясності"?
Ніл МакГуйган

1
Це означає, що непотрібні більш високі накладні дешифрування повідомлень про помилки. Наприклад, впорядкувати по та порядки в синтаксичних повідомленнях про помилки. Або намагання налагодити користувач та користувачів у повідомленнях про помилки аутентифікації.
Користувач Emacs

IMO PurchaseOrder, PortalUser, UserSession кращі, ніж просто Замовлення, Користувач, Сесія, тому сингулярно може бути добре в цьому сценарії
Джон Джай

1

Я вважаю, що таблиця SQL повинна містити множинні імена. Він просто читає набагато краще.

Таблицю книжкових записів слід називати книгами. ORM має використовувати ту саму конвенцію. Об'єкт «Книги» - це колекція, яка очолює всі записи в таблиці Книг. Об'єкт Книги головує над одним записом.

Це робить кодування більш природним.

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 ... Згинайте правила, будьте гнучкими.
Користувач Emacs

Правда, деякі контейнери - це слова з іменниками, що не мають множини - як "доступ". але можна змінити, використовуючи: 'for access_record in access'.
dlink

Хоча мені трохи батисто, бачачи об'єкти зв'язку. Як щодо таблиці зв’язків між Книгами та Авторами? "BooksAuthors" виглядає і звучить жахливо, але "BookAuthor" виглядає і звучить краще. Тоді ви потрапляєте у слова, які мають непарні закінчення для множини (статуси) або мають неправильні іменники (дитина проти дітей). ІМО світ болю в очах!
краплі

Привіт, @blobbles множиною буде BookAuthors, а не BooksAuthors. Тож все одно читається природне. BookPublishers, BookFormats тощо
dlink

Читання завжди добре, але справа не в реченні, а про місця, з яких ми отримуємо дані. наприклад table.field, так author.authorNameце прекрасно. Отримати ім'я автора з таблиці автора. Коли є лише один автор, множина теж виглядає погано. authors.authorNameколи є лише один автор? Це є більш заплутаним imo. Це, звичайно, набагато краще, тепер ми закінчилися з стилем речення mysql_ і маємо кращі способи доступу до даних :)
Джеймс

1

Протягом декількох років працюючи з програмуванням, я прийшов до висновку, що плюралізація є непотрібним ускладненням. На мою думку, згідно з філософією KISS, програміст повинен прагнути до найлегшого та найпростішого вирішення всіх проблем із часу та ефективності. Таким чином, однина дає вам менше роботи, необхідної у всіх сценаріях.


Ця відповідь насправді нічого не додає до цілої нитки! Ви не можете відповісти на проблему, наприклад, зателефонувавши в таблицю "замовити"! Особисто я вживаю французькі слова, коли англійська мова не виконає трюк - ordre, groupe ... Завжди використовуйте поле коментарів таблиці, щоб пояснити свій вибір! Але, дійсно важлива річ - мати конвенцію та дотримуватися її !
Верас

Як це нічого не додає? Я додав, що поодинокі на мою думку менше роботи. Якщо ви маєте іншу думку, ніж моя, будь ласка, не знецінюйте мою думку. "Замовлення" - не проблема. Проблема полягає у більш складних плюралізаціях, які не є такими, як "Категорії", які я бачив неправильно написаними у всіх способах комбінацій, що викликають непотрібну роботу.
ColacX

0

Це дуже особиста річ. Я використовую єдину форму вже 30 років. Але я бачу, чому людям подобається множина. Книги - автори цікаві, тому що я думаю, що автори книги не помиляються. Книга може мати одного або декількох авторів. І автори, можливо, написали одну чи декілька книг (наприклад, у співавторстві). Це також просто залежить від того, як ти поводишся з книгами, написаними більш ніж одним автором. Я згоден з іншими відповідями; виберіть один і будьте послідовними. Що стосується застережених слів. Я думаю, що важко придумати імена для вирішення проблем. користувач -> app_user, сеанс -> app_session, замовлення -> customer_order


0

Ми розглядаємо речі з різних точок зору, і я думаю, що два табори визначені:

Сингулярний ("користувач")
Людина, яка здійснює співвідношення між назвою таблиці та тим, що вона являє собою контейнер, який може містити кілька рядків.

Тож "контейнер користувача" може містити кілька рядків.

Множина ("користувачі")
Людина, яка не здійснює співвідношення між назвою таблиці та тим фактом, що вона являє собою контейнер. Звичайно, вони знають, що це контейнер, але його немає в назві.

наприклад,
"яєчна коробка" може містити кілька яєць, але це очевидно, оскільки посилання на контейнер є в назві, що забезпечує потенціал для декількох яєць. Однак у назві єдиної таблиці "користувач" посилання контейнера немає в імені. наприклад, "user_container", ймовірно, буде прийнятним для людей, які віддають перевагу імен множини.

Я думаю, це також через те, що багаторічна форма є загальною практикою та в більшості навчальних матеріалів в Інтернеті.


Все це говорив, я вважаю, що технічно кажучи, однина є більш точною, враховуючи, що ми називаємо один контейнер, і контейнери можуть містити кілька (або одиночний) рядків.
Людям здається неправильним, оскільки вони подумки пов'язують назву таблиці із вмістом (для кількох рядків потрібне ім'я множини), а не подумки пов'язувати названий контейнер із вмістом (контейнер допускає кілька).

Як завжди, хоча часто немає правильного і неправильного, і справа більше в тому, що відповідає сценарію, і що важливо відповідати тому, що ви виберете.

Якщо ви займаєтесь проектом виключно і немає жодної реальної причини йти в будь-який бік, робіть все, що вам здається, найкращим, або просто надайте перевагу. Застосовуйте те саме, коли в команді розробників і просто прийдіть до одноголосного рішення.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.