Дилемма именования таблиц: имена в единственном и множественном числе

В академических кругах принято, что имена таблиц должны быть единственными для сущностей, атрибуты которых они хранят.

Мне не нравится любой T-SQL, в котором имена должны заключаться в квадратные скобки, но я переименовал Users таблицу в единственное число, навсегда приговорив тех, кто использует эту таблицу, к тому, что иногда приходится использовать скобки.

Мне кажется, что правильнее придерживаться единственного числа, но я чувствую также, что скобки указывают на нежелательные элементы, такие как имена столбцов с пробелами в них и т. Д.

Мне остаться или идти?


person Community    schedule 03.12.2008    source источник
comment
Дубликат более раннего именования таблиц базы данных, во множественном или единственном числе, но этот получил больше внимания.   -  person outis    schedule 02.03.2012
comment
Английский не является моим родным языком, может ли кто-нибудь дать мне пример имени Singular и Plural?   -  person GusDeCooL    schedule 08.11.2012
comment
codeproject.com/Articles/ 309304 /   -  person Abdullah Shaikh    schedule 11.11.2012
comment
Я удивлен, что все больше людей не говорят: это определяется тем, что представляет собой одна строка. В одной базе данных у меня может быть таблица, строки которой представляют один единственный виджет, а другая, имеющая отношение «один ко многим» с этой таблицей, означает, что строки представляют множество виджетов. Если этого не делать, теряется выразительность.   -  person andygavin    schedule 22.09.2015
comment
@andygavin ну, я работаю в системе, где единственное и множественное число смешано (возможно, как вы предлагаете, я мог бы проверить это, но я подозреваю, что это было слишком много поваров), потребовалось время, прежде чем вы все поняли (intellisense - это всегда слишком медленно для меня ...)   -  person Erk    schedule 01.04.2016
comment
Одним из способов решения загадки ключевого слова было бы добавление короткого префикса, например t для таблиц (tUser [s]), v для представлений и т. Д., Однако не рекомендуется для атрибутов (не нужны aGroup или аналогичные!)   -  person Erk    schedule 01.04.2016
comment
Должно быть во множественном числе! Список ‹String› names == ›StringСписок имен, UserCollection пользователей, Collection пользователей, UserTable пользователей, AppleBag красных яблок ... звоните в какие-нибудь колокола? имя класса будет «Пользователь», «Apple» и т. д.   -  person sojin    schedule 29.04.2016
comment
Оба из них: например, у меня есть таблица с именем Users, и это нормально, тогда у меня есть таблица с именем User_Transactions, а не Users_Transactions. Затем представьте, что у вас есть эта таблица: user_categories, которая просто содержит категории, тогда у вас есть связанная таблица с именем users_categories, поскольку пользователь может быть в другой категории ... Я надеюсь, что это дает идею   -  person albanx    schedule 12.08.2016
comment
Я просто хочу добавить, что во всех этих обсуждениях, пожалуйста, обратите внимание, что таблица ни в коем случае не имеет формы или формы, как класс. Таблица - это набор элементов определенного типа, которые можно сортировать, запрашивать и т. Д. По отдельным свойствам. Класс - это структура для описания свойств и поведения определенного типа. В терминах объектно-ориентированного кодирования закрывающее представление в таблице представляет собой набор объектов (независимо от того, какой ORM вы можете использовать). Это, безусловно, самый высокий рейтинг Google по этому вопросу, поэтому, хотя вопрос закрыт, страница по-прежнему имеет ценность.   -  person    schedule 27.01.2017
comment
Я бы выбрал обычную практику экосистемы, в которой вы работаете. Например: в Node.js ORM, такие как Bookshelf.js или Objection.js, в основном основаны на Knex.js. А в документации Knex.js вы найдете имена таблиц во множественном числе. Так что я бы выбрал множественное число в этой области. Источник: knexjs.org/#Schema-createTable   -  person Benny Neugebauer    schedule 07.09.2017
comment
Открыть снова. Этот вопрос касается эффективности и надежности программирования. Хотя мнений действительно много, ответы на самые популярные ответы полны фактов, ссылок и конкретного опыта.   -  person Bob Stein    schedule 04.11.2017
comment
Все наши таблицы являются сингулярными (каждая строка рассматривается независимо), но наша ORM делает ее множественной в нашем приложении (когда вы запрашиваете, вас обычно интересует коллекция)   -  person Zac Faragher    schedule 19.12.2017
comment
ВСТАВИТЬ клиентов (имя) ЦЕННОСТИ (Алиса). Не: ВСТАВЬТЕ клиента (имя) СО ЗНАЧЕНИЯМИ (Алиса). ВЫБРАТЬ ИЗ клиентов, ГДЕ имя = Алиса. Не: ВЫБРАТЬ клиента С именем = Алиса. УДАЛИТЬ ИЗ клиентов, ГДЕ id = 1. Не: УДАЛИТЬ клиента с id = 1. ОБНОВИТЬ клиентов SET email = [email protected] WHERE name = Alice. Не: ОБНОВЛЯЙТЕ клиента с именем = Алиса УСТАНОВИТЕ email = [email protected].   -  person Toxiro    schedule 21.02.2018
comment
Да, я согласен. Имеет смысл иметь таблицу пользователей и одновременно называть ее AppUser; также имеет смысл иметь таблицу правил, применимых к определенному типу пользователей, и называть ее UserRules.   -  person Arindam    schedule 26.12.2018
comment
@Arindam UserRule или UsersRule определенно не звучит правильно в качестве названия для списка правил, связанных с пользователем. Это сильный аргумент против использования единственного числа!   -  person bitoolean    schedule 24.04.2019
comment
Я рекомендую это руководство по стилю: sqlstyle.guide   -  person asmaier    schedule 08.04.2020
comment
С практической точки зрения: когда я использую EF и созданные им сущности, имеет больше смысла использовать new Order, чем new Orders, например, при создании новой записи заказа.   -  person Kai Hartmann    schedule 10.11.2020
comment
Это может отличаться от типа БД. Если вас интересует только РСУБД, я останусь с единичным числом, как и с именами кодовых классов. Но для нереляционных, таких как Azure Data Explorer, я бы использовал множественное число, как это делает Microsoft в журналах Application Insights (хранящихся в ADX).   -  person gsscoder    schedule 04.04.2021


Ответы (41)


Другие дали довольно хорошие ответы относительно «стандартов», но я просто хотел добавить это ... Возможно ли, что «Пользователь» (или «Пользователи») на самом деле не является полным описанием данных, содержащихся в таблице ? Не то чтобы вы слишком сходили с ума от имен таблиц и специфики, но, возможно, что-то вроде «Widget_Users» (где «Widget» - это имя вашего приложения или веб-сайта) было бы более подходящим.

person Community    schedule 03.12.2008
comment
Я согласен. OrgUsers, AppUsers, все, что угодно, чтобы избежать использования ключевого слова. - person MikeW; 13.03.2009
comment
-1. Таблица Пользователи (и страны, языки) могут использоваться одновременно в нескольких приложениях. - person OZ_; 27.09.2011
comment
Именно поэтому я сказал: «Возможно ли ...?» и, возможно - person Tom H; 27.09.2011
comment
Разве привязка имени схемы не устранит всю путаницу? AppName1.Users, AppName2.Users? - person Zo Has; 25.10.2011
comment
Это одна из возможностей, но может быть много причин, по которым кто-то не захочет использовать схемы таким образом. Кроме того, даже со схемой вы все равно столкнетесь с проблемами, связанными с тем, что они являются ключевыми словами. - person Tom H; 25.10.2011
comment
Я не согласен с префиксом таблицы - возможно, это должна быть схема? - но я согласен с более описательным названием. Даже такой простой вещи, как AppUser, было бы достаточно, не вдаваясь в обсуждение всего пространства имен. - person ; 10.02.2012
comment
Какое отношение имеет префикс имени таблицы к использованию единственного и множественного числа? Теперь вопрос только в том, использую ли я Widget_User или Widget_Users. Это не имеет отношения к вопросу. - person Wesley Smith; 01.12.2016
comment
Этот принятый ответ является скорее побочным комментарием и не отвечает на вопрос. - person Viliami; 01.01.2017
comment
Таблица должна быть независимой от клиента, например, ее не должно волновать, называется ли она Widget или как она используется, имена могут измениться. Единственная обязанность таблицы - сохранять данные пользователя в структурированной и явной форме. - person tsuz; 13.02.2018
comment
Определенно не используйте имя приложения! В какой-то момент кто-то из маркетологов переименует ваш продукт в NewFooApp, и вы застрянете с наследием Widget, навсегда загрязняющим вашу схему базы данных, и лишь горстка людей останется в компании достаточно долго, чтобы вспомнить, что это вообще означает. - person gregmac; 08.06.2020
comment
При запросе `from Country, Cities where Country.id`, здесь страны с одним идентификатором, звучит не очень хорошо. - person Ravi Parekh; 16.10.2020

У меня был такой же вопрос, и после прочтения всех ответов здесь я определенно остаюсь с SINGULAR, причины:

Причина 1 (концепция). Вы можете представить сумку, содержащую яблоки, как AppleBag, неважно, содержит ли она 0, 1 или миллион яблок, это всегда один и тот же мешок. Таблицы - это просто контейнеры, имя таблицы должно описывать то, что она содержит, а не количество данных. Кроме того, понятие множественного числа больше относится к разговорной речи (фактически, чтобы определить, есть ли один или несколько).

Причина 2. (Удобство). с именами в единственном числе выступать легче, чем с именами во множественном. Объекты могут иметь неправильное множественное число или вообще не иметь множественного числа, но всегда будут иметь единственное число (за некоторыми исключениями, такими как Новости).

  • Клиент
  • Заказ
  • Пользователь
  • Статус
  • Новости

Причина 3. (Эстетика и порядок). Это особенно важно в сценариях основной-подробный, это лучше читается, лучше выравнивается по имени и имеет более логичный порядок (сначала мастер, затем детали):

  • 1. заказ
  • 2.OrderDetail

По сравнению с:

  • 1.OrderDetails
  • 2. заказы

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

  • Customer
  • Customer.CustomerID
  • CustomerAddress
  • public Class Customer {...}
  • SELECT FROM Customer WHERE CustomerID = 100

Как только вы узнаете, что имеете дело с Customer, можете быть уверены, что будете использовать одно и то же слово для всех ваших потребностей взаимодействия с базой данных.

Причина 5. (Глобализация). Мир становится все меньше, у вас могут быть команды разных национальностей, не для всех английский является родным языком. Программисту, не владеющему английским языком, было бы легче думать о репозитории, чем о репозиториях, или о статусе вместо статусов. Использование уникальных имен может привести к меньшему количеству ошибок, вызванных опечатками, сэкономить время, поскольку вам не нужно думать, «Ребенок» или «Дети», а значит, повысит продуктивность.

Причина 6. (Почему нет?). Это даже может сэкономить вам время на написание, сэкономить место на диске и даже продлить срок службы клавиатуры компьютера!

  • SELECT Customer.CustomerName FROM Customer WHERE Customer.CustomerID = 100
  • SELECT Customers.CustomerName FROM Customers WHERE Customers.CustomerID = 100

Вы сохранили 3 буквы, 3 байта, 3 дополнительных нажатия клавиш :)

И, наконец, вы можете назвать тех, кто испортил зарезервированные имена, например:

  • Пользователь ›LoginUser, AppUser, SystemUser, CMSUser, ...

Или используйте печально известные квадратные скобки [Пользователь]

person Community    schedule 30.04.2011
comment
Готов поспорить, если вы повесите этикетку на ящик для носков, вы назовете его Socks. - person Chris Ward; 06.02.2012
comment
Определенно. Трудно получить один стандарт, который работал бы для всех и для всех, важно, чтобы он работал для вас. Это работает для меня, и здесь я объяснил почему, но опять же, это для меня, и я нахожу это очень удобным. - person Nestor; 14.02.2012
comment
Мне нравится этот ответ, он дает много вариантов преимуществ использования Singular. Я уверен, что есть и недостатки, как в примере с носками, но все же считаю, что это довольно изящный подход. - person will824; 10.04.2012
comment
Причина 6, хорошо, пока вы не попытаетесь вернуть более одного пользователя: P SELECT Customers.CustomerRole FROM Customers WHERE Customers.CustomerRole = 'admin' - person steve; 21.06.2012
comment
Крис, более важный вопрос: почему вы должны следовать соглашениям об именах баз данных при именовании ящика для носков? - person Kyle Clegg; 25.07.2012
comment
@Kyle из-за аналогии Нестора с сумкой / контейнером для яблок (Причина 1). Когда вы обозначаете движущуюся коробку, вы пишете «Книги», а не «Книга». - person S22h; 04.10.2012
comment
Этот ответ требует большей похвалы. В нем обсуждается ряд практических причин, по которым я предпочитаю имена в единственном числе. Альтернативные обсуждения правильного языка применительно к множествам носят чисто философский характер и затемняют суть. Singular просто лучше работает. - person Jason; 09.10.2012
comment
Причина 4 милая, но она бесполезна, если вам приходится использовать форму множественного числа в другом месте кода. Допустим, есть модельная функция для получения списка неактивных пользователей, естественно назвать ее getInactiveUsers. Итак, простота становится: (1) особенность SQL для всего. (2) особый класс в коде. (3) для остальных - единственное или множественное число, в зависимости от того, является ли это коллекцией или единичным экземпляром. Моя простота всего лишь (3). - person sayap; 24.11.2012
comment
+1 Только по причине 5 (глобализация). Я сталкивался с этой проблемой раньше, и, безусловно, это помогает иностранным программистам использовать единое соглашение об именах для объектов и таблиц. - person MV.; 25.12.2012
comment
У меня дома есть ящик для носков, а не ящик для носков. Если бы это была база данных, я бы назвал ее таблицей Sock. - person jlembke; 12.04.2013
comment
@Chris Сущность не является «этикеткой» или «коллекцией». Он «должен» определять «экземпляр» ... - person Edward J Beckett; 30.04.2013
comment
@sayap, вы правы, хотя, если вы обычно работаете в команде и в проекте есть несколько уровней, только те, кто работает над кодированием, должны иметь дело с множественной формой, в то время как другие, такие как дизайнер базы данных и пользовательский интерфейс, могут работать с единственными числами проще . - person Nestor; 03.05.2013
comment
@Nestor, после прочтения вашего комментария причина 4 теперь имеет смысл. Я действительно продан :) - person sayap; 04.05.2013
comment
Настолько плохо, что я не могу проголосовать за этот ответ дважды. Один по причине 1, а другой по причине 4. - person Oybek; 31.08.2013
comment
Причины 2-6 довольно спорны, если вы согласитесь с тем, что идея многословных языков и ООП предназначена для гуманизации программирования, чтобы концепции были мгновенно поняты. - person Tim; 18.09.2013
comment
Что касается Причины 1, вы можете оправдать единственное имя, используя имя коллекции с суффиксом, когда речь идет об одном объекте: Это мой SockDrawer. Однако, когда вы говорите обо всех своих ящиках, вы должны указать «Это мои носки, это мои брюки и т. Д.». Это потому, что контекст разговора о типе коллекции уже установлен. Для чего нужен этот стол? Мои пользователи. Что это за таблица? Моя таблица пользователей. Как вы это назовете? Пользователи. - person Tim; 18.09.2013
comment
@jlembke: Это ящик для носков. Вы не стали бы называть свой ящик для носков словом «носок». Какая аналогия более точна? - person Ry-♦; 10.10.2013
comment
@minitech: Это хорошие моменты. Для меня это именно то, что сказали Нестор и Джейсон, я просто думаю, что это работает лучше. Но продолжим бесполезные споры :) - Носки, штаны и перчатки все равно обычно имеют множественное число. Может быть, рубашки лучше. Я слышу, что положите эти рубашки (в частности) в ящик для рубашек (абстрактных) в моем доме каждый день, а на работе я слышу, как «Сохраняйте этих клиентов в таблице клиентов». Но в конце концов, это не имеет значения. Singular работает лучше для меня по причинам, указанным в этом ответе. И если я увижу базу данных с множественным числом, ничего страшного, но я знаю, что возникнут некоторые неудобства. - person jlembke; 11.10.2013
comment
@jlembke: какой отличный пример носков обычно во множественном числе (потому что они идут парами), и спасибо, что положили эти рубашки в ящик рубашки, так как я не являюсь носителем английского языка, я не знал об этом. Благодаря вашим примерам теперь я уверен, что ящик для носков больше не является веским аргументом против единственной концепции. - person Nestor; 26.10.2013
comment
У вас есть записи пользователей, а не записи пользователей. Следовательно, у вас есть таблица пользователей, а не таблица пользователей. - person OCDev; 27.10.2013
comment
@minitech: Да, вы бы не назвали свой ящик для носков Sock. Но вы МОЖЕТЕ назвать это Sock Drawer. Таким же образом вы можете назвать пользовательскую таблицу User_Table. Имена МОГУТ быть в единственном числе, если после них стоит слово Таблица. Итак, вот как я смотрю на это: представьте, что слово Table должно появиться в конце всех ваших имен таблиц, но по соглашению слово Table опускается, оставляя вам только единственное слово. Просто как условность. Когда вы смотрите на имя таблицы, вы видите User, но вы интерпретируете его User Table. Это может сработать для людей с ОКР вроде меня. - person OCDev; 27.10.2013
comment
@FriendlyDev: Я прочитал «Таблицу с пользователями». ERR_SUBJECTIVE - person Ry-♦; 27.10.2013
comment
@minitech: Я согласен, то, как это можно прочитать, субъективно. Я говорю о другом: причины 1–6 в основном объективны и показывают, что использование единичных имен таблиц более эффективно для целей разработки. Однако использование уникальных имен для таблиц иногда кажется некоторым людям неудобным (вот тут-то и возникает субъективное восприятие). Это единственный недостаток, который я вижу в использовании имен в единственном числе. Точка зрения, которой я поделился, помогает мне преодолеть мысленные оговорки относительно использования единственных имен. Я уверен, что такая точка зрения поможет другим более комфортно использовать имена в единственном числе. - person OCDev; 27.10.2013
comment
@FriendlyDev: Причина 3 - единственная объективная причина в списке. 2 и 5 - одна и та же причина. Причина 6 глупая. Но… ладно. - person Ry-♦; 27.10.2013
comment
@minitech: Причина 1 сформулирована не очень хорошо, но объективна. Для обозначения коллекции или набора всегда используется слово в единственном числе. Это никогда не набор носков или коллекция безделушек, а всегда набор носков или коллекция безделушек. Я согласен с тем, что вы можете сослаться на набор или коллекцию, сказав набор носков или коллекцию безделушек, но на самом деле вы не ссылаетесь на фактическое имя набора или самой коллекции, когда обращаетесь к ним таким образом. В «Коллекция пользователей» и «Коллекция пользователей» Пользователь - это имя коллекции, а пользователи - это часть описания коллекции. - person OCDev; 27.10.2013
comment
@FriendlyDev: Я совершенно не согласен. Меня зовут райан; Вы не называете меня «человеком Райана». «Таблица носков» не подразумевается. (Не согласен? Вот почему это субъективно.) - person Ry-♦; 27.10.2013
comment
@minitech: 2 и 5 тесно связаны и могут быть объединены вместе, да, но это не значит, что они необъективны. Также можно доказать, что 4 способствует простоте, что делает 4 объективными. 6 слабоват, но тоже объективен. Все это объективно. И, наконец, вы Райан, но вы не являетесь и никогда не будете набором или коллекцией, поэтому пример с Райаном не является продолжением. Если и существовала коллекция людей по имени Райан, ее можно было бы назвать Коллекцией Райана, а не Коллекцией Райана. Коллекция Райанов будет относиться к нему, но не будет его именем. - person OCDev; 27.10.2013
comment
Хотя мне нравится этот ответ, я обращаю внимание на URL stackoverflow.com/questions/.... Я бы задавал вопросы в таблице вопросов, и URL-адрес без путаницы отражал бы имя таблицы. - person rybo111; 14.11.2013
comment
Я бы оставил params / data вне ваших соглашений об именах таблиц. Не создавайте новый стол для каждого типа выдвижных ящиков. Добавьте столбец для обозначения типа элемента, хранящегося в нашем ящике. - person Travis; 19.11.2013
comment
Что касается вашего примера applebag, я согласен. Но если я создаю таблицу с разными видами яблок, да, я могу создать таблицу с именем Apple [id, color, size, countryOrigin и т. Д.), Но если я создаю таблицу, в которой я сохраню все выращенные фрукты в моей стране я могу назвать это фруктами [id, name]? - person shabby; 10.12.2013
comment
@shabby Если несколько яблок попадают в таблицу Apple, тогда несколько фруктов попадают в таблицу Fruit. Вы также можете называть их обоих множественным числом. Единственное, что гарантированно будет неприемлемым, - это называть одно единственное, а другое - множественное. - person Rainbolt; 12.02.2014
comment
Прочитав все комментарии, я чувствую, что должен сказать .... SOCK .... +10 к OP за очень хороший ответ! - person melodiouscode; 23.04.2014
comment
Причина 7. В случае, если таблица отображает объект, имя таблицы и имя класса будут совпадать, что позволяет избежать дополнительных потерь импеданса при несовпадении имен. - person Sebastian Sastre; 06.07.2014
comment
Обычно из ящика вынимают пару носков, а не только один. Вешалка для галстуков, рубашка, шкаф для обуви, кажется, подтверждают ЕГО ОСНОВНУЮ причину. - person bvj; 14.07.2014
comment
Стол новостей так же важен, как стол любви или стол погоды. Все они en.wikipedia.org/wiki/Mass_noun. Новостей не существует. , любовь или погода. Сколько погоды вы хотели бы сегодня? - person Tom Haws; 06.09.2014
comment
Недавно я нашел еще одну вескую причину, чтобы придерживаться единственного числа. У меня была таблица, содержащая кучу настроек, где каждый набор представлял собой набор настроек для организации, и я подумал, следует ли мне использовать единственное или множественное число. Тут меня осенило, потому что, очевидно, мне пришлось назвать таблицу OrganizationSettings. Если бы я использовал множественное число, я бы не смог провести это различие. В данном случае множественное число относится к набору настроек для каждой организации. И вы все равно можете создать таблицу, содержащую разные настройки в каждой строке. Я надеюсь, что смогу донести свою точку зрения. - person Semmel; 04.10.2014
comment
Хотя я согласен с выводом, что единственное число лучше, пример по первой причине кажется нелогичным. Вы говорите, что мешок с яблоками должен называться AppleBag; по этой причине таблица должна называться UserTable (как вы описываете контейнер - мешок с яблоками или таблицу пользователей). Или, наоборот, если вы считаете, что таблица пользователей должна называться «Пользователь», тогда вы должны называть свою сумку с яблоками Apple. - person Rob Grant; 27.11.2014
comment
Я должен позвонить тебе по твоему комментарию "AppleBag" с первого пункта. Почему? Потому что, добавляя суффикс «Сумка», вы меняете его так, чтобы он ссылался на контейнер для чего-то. По той же причине у меня нет проблем, если вы сказали AppleTable, что приравнивается к AppleCollection. Но без описательной части - «таблица» или «коллекция» здесь - вы называете что-то тем, что оно может содержать, а может и не содержать, а не тем, чем оно является самим. Другими словами, вы можете сказать: «В AppleBag есть яблоки», но вы бы не сказали: «В яблоке есть яблоки», но вы можете сказать «В предмете с именем« Яблоки »есть ноль или более объектов яблока ». - person Mark A. Donohoe; 09.07.2015
comment
@jlembke, ты прав. Вы бы назвали это «ящиком для носков», но, по вашему собственному признанию, вы не делаете этого в SQL, потому что если бы это было так, вы бы назвали его «SockTable», чего не делаете. Вы называете это «носком». Как я сказал выше, «ящик для носков содержит предметы для носков». Вы бы не сказали: «Ящик для носков содержит объекты-носки» или «Носок содержит объекты-носки». Вы путаете имя с описанием. На вашем «Ящике для носков» (описание) есть ярлык (название) «Носки», а не «Носки». - person Mark A. Donohoe; 09.07.2015
comment
Если таблица не предназначена для чтения человеком, назовите ее asdjfhasgkdjagksjdg. - person Quarktum; 17.09.2015
comment
А как насчет наименования самой базы данных? Например, я хочу иметь БД песочницы, которую будут использовать модульные тесты, и я пытаюсь выбрать между UNIT_TEST и UNIT_TESTS. - person Leonid; 25.09.2015
comment
Основная причина использования единственного соглашения об именах: таблицы - это прямое выражение сущности в базе данных на языке ER-модели / реляционной алгебре. Таблица «яблоко» представляет собой сущность «яблоко» и содержит экземпляры яблока. В ООП имя класса имеет единственное число: Apple. У вас будет много яблок - экземпляров (объектов) типа Apple. - person tobia.zanarella; 13.01.2016
comment
О носках и носках: если бы у меня был такой ящик, я бы, вероятно, назвал его socksDrawer, потому что он такой. Это не носок или носки, это ящик. Я бы назвал контейнер не только то, для чего он используется. Почему бы не назвать таблицу так, как она есть: Таблица пользователей или Таблица пользователей? Это делает обсуждение единственного и множественного числа неуместным в этой области, если оно постоянно используется. Использование такого соглашения об именах таблиц в вашем коде делает его на 100% несомненным, несмотря на дополнительный постфикс. - person html_programmer; 31.03.2016
comment
Причина 1. Представьте, что вы гуляете по городу с сумкой для яблок, и кто-то спрашивает, что у вас с собой. Вы бы ответили: «мой мешок с яблоками» или «яблоки». Но не сказал бы «яблоко», если вы не сумасшедший. Причина 2: слова множественного числа не так уж и сложны. По вашей логике, можно вообще отказаться от множественного числа. Я думаю, что человека это может сбить с толку. Причина 3. Порядок действителен, хотя я не часто упорядочиваю свои таблицы лексикографически. Причина 4: «Customer.CustomerID». Действительно? Причина 5: Перефразирование причины 2. Причина 6: Хорошо, я продана. Множественное число. - person Lorenz Forvang; 30.04.2016
comment
Мне не нравится ваша AppleBag аналогия. Это предполагает, что вам придется назвать таблицу для клиентов CustomerTable вместо Customer. - person pacoverflow; 21.10.2016
comment
@Nestor Table с именем AppleBag сбивает с толку? это контейнер для яблок или для пакетов с яблоками. По вашему мнению, таблица с именем Customer является контейнером для клиента. AppleBag - это тип, который хранится внутри таблицы Bags. - person Navrattan Yadav; 02.12.2016
comment
Вы знаете, что привело меня сюда сегодня? Смотрю на базу данных, полную неудобных множественных имен таблиц. У меня просто глаза дернулись, и я не знала почему. Когда я смотрю на ERD (или диаграмму схемы), я смотрю на каждую таблицу как на отдельную запись, поэтому, на мой взгляд, именно так она регистрируется. Это вопрос мнений, но я согласен с пунктами, представленными в этом ответе. - person megamaiku; 24.02.2017
comment
@ tobia.zanarella, как я уже сказал выше в отношении другого плаката, ваш аргумент, приравнивающий имена классов, неверен, потому что класс представляет собой единственный экземпляр. Он не представляет собой набор вещей. И наоборот, таблица представляет собой набор вещей, представленных строками. Строка - это синоним класса, а не таблицы. Вы не скажете «Sock содержит коллекцию носков», но вы можете сказать: «Socks (имя) или SockTable (описание) содержат в себе коллекцию объектов Sock». - person Mark A. Donohoe; 17.04.2017
comment
@pacoverflow, ваш комментарий именно поэтому таблица должна быть множественного числа. Клиенты ясно показывают, что он содержит коллекцию объектов клиентов. Если это просто «Клиент», то откуда вы знаете, что он не содержит свойств для конкретного клиента? Единственное - неоднозначно. К тому же он не следует правильной грамматике. Выберите * From Customers, где Name = Joe четко указывает, что вы выбираете клиентов с этим именем. Но означает ли Select * From Customer where Name = Joe, что вы выбираете часть клиента, где эта часть называется Joe, или вы выбираете целого клиента с этим именем? - person Mark A. Donohoe; 17.04.2017
comment
Вы никогда не упоминаете о понятности. Что должно предшествовать удобству или необходимости меньше печатать. Таблица - это список вещей. Если я увидел что-то под названием «яблоко», я бы понял это как одно яблоко. Если бы я увидел название «яблоки», я бы понял, что любое количество яблок. Я думаю, что использование единственного числа сбивает с толку кого-то, кто пытается понять смысл кода. Следовательно, он семантически несовершенный, и следует использовать множественное число. - person JCF; 04.05.2017
comment
Я назвал свой ящик для носков «боб». Было бы странно называть это «бобами» ... Более того, я бы не стал называть таблицу новостями, которая в любом случае кажется расплывчатой, поэтому я бы избегал этого имени и для, например, «новостной статьи», которая более информативна по отношению к ее фактическому содержанию. . - person Kevin R; 10.05.2017
comment
@ChrisWard, вы не называете ящик; в данном случае вы только называете носки. Я имею в виду, что эта этикетка не является ящиком для носков, это только носки, которые находятся в ящике для носков. - person Burak Kalafat; 02.11.2017
comment
Это очень похоже на мнение человека, большая часть работы которого заключается в работе с самой базой данных. Я работаю в позициях полного стека и предпочитаю собирательные имена или простые множественные числа, потому что это хорошо работает во всем приложении. У вас всегда есть список пользователей (таблица) и пользователь (строка) внутри. Выбор хороших имен на уровне SQL в значительной степени гарантирует, что даже у нескольких разработчиков эти имена будут применены ко всему приложению. Когда вы начинаете пытаться научить разработчиков как-то иначе думать о множественном числе на уровне SQL, все становится запутанным. - person lolol; 28.02.2018
comment
Если вам нужно пометить собственное рисование носков, у вас проблемы посерьезнее, чем с именованием таблиц;) - person niico; 11.06.2018
comment
Я думаю, это зависит от того, что вы делаете, использовать ли существительные во множественном или единственном числе для имен таблиц. Однако fruit уже стоит во множественном числе - и можно сказать, что у вас есть пара socks не пара sock. Socks - единственное, а Sock Pairs - множественное. Я считаю, что так оно и есть. ржу не могу. Мне нравится брать сдвиги с обеих сторон, и я определенно вижу плюсы в использовании формы единственного числа. Отличный ответ! - person Rik; 12.12.2018
comment
Мне нравится, как кто-то экономит место на диске, сокращая s в имени таблицы, и тратит гораздо больше места, добавляя к каждому свойству клиента префикс customer. - person sempasha; 27.08.2019
comment
@Semmel, если вы связываете настройки с организациями, я уверен, что у вас просто таблица соединений - person Alexander; 24.10.2019
comment
Причина 1 основана на ложных предпосылках. Вы можете подумать о сумке с яблоками, такой как AppleBag, почему это должно быть так? имя таблицы должно описывать то, что она содержит, а не то, сколько данных она содержит пользователей :) Но даже если она должна быть названа в соответствии с типом, который она содержит, почему это должно быть сделано? вы не указываете никаких причин. Причина 2. (Удобство) Это будет иметь место только в том случае, если вы останетесь в своей базе данных. При разработке приложения вам все равно придется иметь дело с именами в единственном и множественном числе. Невозможность сделать это сделает код трудным для чтения. - person Patrick; 13.12.2019
comment
В любом случае, root-проблема заключается в том, что мы все еще пытаемся сократить естественный язык, и поэтому либо таблицы с префиксом col refs будут страдать (w / множественное число), либо table refs (w / singular), и я считаю, что большинство разработчиков не могут < i> просто работать либо с SQL, либо с кодом приложения. На естественном языке вы должны всегда добавлять суффиксы к своим refs с именем контейнера (например, таблица / список / электронная таблица сотрудников (а не только сотрудники), но в SQL и коде приложения, даже если мы ' мы добились прогресса в удалении (что когда-то считалось нормальным) 1/2-буквенных имен идентификаторов, мы все еще не полностью развились до включения имени контейнера в наши имена id. - person Tom; 29.01.2020
comment
... поэтому выберите Customer.Name из Customer, где Customer.Id = 1 действительно должен быть (чтобы не сокращать естественный язык), выберите CustomerTable.CurrentRow.Name из CustomerTable, где CustomerTable.CurrentRow.Id = 1 - person Tom; 29.01.2020
comment
Мне очень нравится ваш ответ, единственная проблема в том, что происходит, когда вы хотите получить доступ ко всем записям, это выглядит немного странно, например: $ article- ›get_all () не имеет смысла, $ article-› all () звучит более семантично, я представил бы, что единственное число будет представлять одну строку и ничего больше - person ; 05.04.2020
comment
Я пришел сказать что-то похожее на Тома, я иногда думаю о том, чтобы назвать свои таблицы таблицами. Пишу ли я Select * from PeopleTable или Select * from PersonTable - понятно, что я делаю. Некоторое время назад я перешел на код EF, и в VS он автоматически предлагает множественные имена для таблиц, потому что это имеет больше смысла в терминах объектов LINQ и oop. Я понял, что добавляю ViewModel объектов к ВМ, чтобы прояснить мой код. Тогда я подумал, может быть, модели должны иметь суффикс Model. Но тогда вам придется вызвать стол PersonModelTable - в общем, выберите то, что лучше всего подходит для вашей установки !? - person jamheadart; 30.09.2020

Если вы используете инструменты объектно-реляционного сопоставления или будете использовать их в будущем, я предлагаю Singular.

Некоторые инструменты, такие как LLBLGen, могут автоматически исправлять множественные имена, например, «Пользователи» на «Пользователь», без изменения самого имени таблицы. Почему это важно? Потому что, когда он отображается, вы хотите, чтобы он выглядел как User.Name вместо Users.Name или хуже из некоторых моих старых таблиц баз данных, называющих tblUsers.strName, что просто сбивает с толку в коде.

Мое новое практическое правило - судить о том, как он будет выглядеть после преобразования в объект.

Одна таблица, которую я обнаружил, не соответствует новому названию, которое я использую, - это UsersInRoles. Но всегда будут эти несколько исключений, и даже в этом случае он отлично выглядит как UsersInRoles.Username.

person Community    schedule 03.12.2008
comment
Я проголосовал против и скажу почему, потому что не согласен. ORM по своей природе связан с отображением. Каждый инструмент ORM, который я когда-либо использовал, поддерживает указание имени таблицы, которое будет использоваться для объекта, если оно отличается от имени объекта. Это важно, потому что вся причина, по которой мы сопоставляем реляционные базы данных, заключается в том, что мы можем легко создавать специальные запросы и отчеты с формами, отличными от нашей объектной модели. В противном случае мы бы все уже использовали базы данных объектов / документов. - person joshperry; 21.08.2010
comment
ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость. - person barrypicker; 15.09.2011
comment
Это преобладает в инструментах или только в инструментах, которые вы использовали? - person Bruce Alderson; 24.09.2011
comment
В моем мире я стараюсь использовать согласованные имена во всем проекте, чтобы не тратить время на размышления, есть ли у этого экземпляра в конце или нет. Тот факт, что ORM может переименовывать и быть независимым, не означает, что это помогает вашим коллегам-разработчикам. - person John Nicholas; 01.05.2012
comment
Некоторые ORM (как и многие инструменты программирования) имеют поведение по умолчанию, которое генерирует реализации без конфигурации ... с точки зрения ПРОИЗВОДИТЕЛЬНОСТИ. Таким образом, создание класса Employee без явного сопоставления приведет к созданию таблицы Employee по умолчанию. - person user919426; 15.02.2015
comment
@barrypicker. Множественные имена не просто выглядят глупо в коде ORM. Множественные числа тоже плохо смотрятся в SQL, особенно когда речь идет об уникальном атрибуте. Кто никогда не писал select user.id из пользователей? Или, может быть ... из пользователей, вышедших присоединиться к thingy.user_id = user.id ...? - person Samuel Danielson; 24.02.2017
comment
@SamuelDanielson - Я не понимаю твоей точки зрения. Используя пример SQL, который вы предоставили, я бы в любом случае использовал псевдоним таблицы, например «выберите u.Id из пользователей u». Стол представляет собой набор предметов, поэтому он должен быть во множественном числе - как в корзине с яблоками, а не в корзине с яблоками. - person barrypicker; 25.02.2017

Я предпочитаю использовать неизменяемое существительное, которое в английском языке встречается в единственном числе.

Изменение номера имени таблицы вызывает орфографические проблемы (как показывают многие другие ответы), но выбор этого варианта, поскольку таблицы обычно содержат несколько строк, также семантически полон дыр. Это станет более очевидным, если мы рассмотрим язык, в котором существительные изменяются в зависимости от падежа (как и большинство других):

Поскольку мы обычно что-то делаем со строками, почему бы не указать имя в винительном падеже? Если у нас есть таблица, в которую мы пишем больше, чем читаем, почему бы не указать имя в дательном падеже? Это таблица чего-то, почему бы не использовать родительный падеж? Мы бы этого не сделали, потому что таблица определяется как абстрактный контейнер, который существует независимо от его состояния или использования. Наклонение существительного без точной и абсолютной смысловой причины - это лепет.

Использование существительного, которое не может быть изменено, простое, логичное, правильное и не зависит от языка.

person Community    schedule 08.10.2010
comment
Наверное, это самый логичный аргумент на эту тему, который я когда-либо видел, и мне приятно, что я потратил то время на латынь. +1 точно. - person ; 23.04.2013
comment
Что ж, мне явно нужно пополнить свой словарный запас. - person TJ Biddle; 21.05.2013
comment
+1 Понимаете, это те ответы, в которых больше всего нуждается Интернет. Безупречные доказательства с использованием богатого словаря для выполнения безупречной логики. - person OCDev; 27.10.2013
comment
Я приму это к сведению в следующий раз, когда буду программировать на латыни. Тем временем пользователи будут переходить в таблицу пользователей, а клиенты - в таблицу клиентов. - person Caltor; 04.08.2015
comment
Убежден - это не отражается. Интересно отметить, что по прошествии всего этого времени популярные варианты единственного и множественного числа оба неверны! - person Stuart; 21.08.2015
comment
Поздно для вечеринки, но мне интересно, примените ли вы то же правило к именам переменных в (другом) программировании, когда они содержат несколько элементов одного типа (например, массивы, списки, наборы и т. Д.). FrequentCustomerArray, а не FrequentCustomers? Если нет, то чем это отличается? - person Thijs van Dien; 10.10.2016
comment
Также запоздалый ответ. В коде вам нужно определить разницу во множественном и единственном числе, потому что количество элементов в вашей переменной имеет значение. В именах классов все по-другому: вы бы не назвали свой класс Clients, если он является клиентом. - person Arno; 02.07.2018
comment
Некоторые непрофессиональные определения и примеры будут очень полезны для тех из нас, у кого нет времени на получение степени лингвистики перед созданием таблицы. - person MarredCheese; 23.04.2020
comment
SELECT Name FROM Users - это предложная фраза - вы извлекаете материал из таблицы пользователей. На самом деле вам нужен падеж ablative. Итак, в английском языке нет разного написания для разных падежей, но аргументы в пользу множественного числа одинаковы - вам нужно имя, которое будет вписываться в предложения, в которых оно используется. Вы говорите «Выбирайте эти вещи из списка пользователей», а не «Выбирайте эти вещи из списка пользователей». - person beleester; 28.05.2020
comment
Единственное число не является «не изменяемым», оно просто использует наклонение count по умолчанию для английского языка, что означает единственное, а не множественное число. - person Jason Goemaat; 25.03.2021

Какое соглашение требует, чтобы таблицы имели единственные имена? Я всегда думал, что это имена во множественном числе.

Пользователь добавлен в таблицу «Пользователи».

Этот сайт соглашается:
http://vyaskn.tripod.com/object_naming.htm#Tables < / а>

Этот сайт не согласен (но я не согласен с этим):
http://justinsomnia.org/writings/naming_conventions.html


Как уже упоминали другие: это всего лишь рекомендации. Выберите соглашение, которое работает для вас и вашей компании / проекта, и придерживайтесь его. Переключение между единственным и множественным числом, а иногда и сокращением слов, а иногда и без них, вызывает гораздо большее раздражение.

person Community    schedule 03.12.2008
comment
При применении теории множеств к таблицам любой экземпляр в наборе является представителем множества, поэтому Apple - это набор Apple, он не зависит от того, сколько яблок в наборе - это Apple с множеством экземпляров. «Мешок» с яблоками не превращается в «мешки», когда в нем много яблок. - person ProfK; 05.12.2008
comment
Отношение состоит из заголовка и тела. Заголовок - это набор атрибутов. Тело (n-арного отношения) - это набор из n кортежей. Заголовок отношения также является заголовком каждого из его кортежей. [en.wikipedia.org/wiki/Relational_model] - person ProfK; 05.12.2008
comment
Что делать, если у вас есть пакет с 5 яблоками внутри? Вы называете это мешком с яблоками? или мешок яблок? - person Christopher Mahan; 03.01.2009
comment
Я думаю, что теория такова, что набор называется «Яблоки». Единственное яблоко - это все еще набор Яблок, хотя и набор из одного экземпляра. Несколько яблок - это тоже набор Яблок. - person Mark Brackett; 04.04.2009
comment
Как бы вы определили в своем коде массив объектов Apple? Apple apples[100] или Apple apple[100] - person joshperry; 21.08.2010
comment
@Christopher, если смысл существования мешка состоит в том, чтобы хранить яблоки и только яблоки, то это мешок для яблок, независимо от того, содержит ли он 1 яблоко, 100 яблок или нет яблок. - person Ian Mackinnon; 07.10.2010
comment
@ Ян: Это потому, что таблица является универсальной, и ее можно сравнить с транспортным контейнером (может содержать что угодно, от ящиков для яблок до ящиков с мотоциклами Harley Davidson). Вы говорите: грузовой контейнер с апельсинами, а не оранжевый грузовой контейнер. Вы говорите: грузовой контейнер с автомобильными запчастями, а не грузовой контейнер с автомобильными запчастями. Если вы создали настраиваемую структуру данных, предназначенную для хранения только определенного типа данных, например, названий яблок, и назвали ее kungabogo, тогда у вас могло бы быть яблоко kungaboko. Я знаю, о чем вы думаете, но сначала подумайте о мешочке с шарами и поймите разницу в значениях. - person Christopher Mahan; 08.10.2010
comment
@Christopher, конкретная таблица базы данных предназначена для хранения вещей только одного типа, навсегда и для связи с этим типом, даже когда она пуста, поэтому транспортный контейнер - неадекватная метафора. Это тоже абстрактные понятия, поэтому вряд ли кто-то их спутает с мошонкой. - person Ian Mackinnon; 09.10.2010
comment
@ Ян: Хорошо, я согласен с тобой. Таблицы в том виде, в каком они реализованы, не могут содержать ничего, кроме того, что они предназначены для хранения. За исключением, конечно, того, что они могут содержать много разных вещей. Красные рубашки, синие рубашки, мягкие рубашки, короткие рубашки и т. Д. Рубашки с пайетками. Все они падают на стол рубашек. Рубашки на распродаже, рубашки на заказ, рубашки с дефектом, рубашки в разработке, рубашки в обертках, рубашки носятся, рубашки уничтожены, рубашки в африке, рубашки в пакистане, рубашки на корабле, рубашки в коробках, рубашки на полке, рубашки на полу. Все рубашки. В рубашечном столе. Имеет смысл. Нет. - person Christopher Mahan; 09.10.2010
comment
Это забавные примеры - я склонен согласиться с @Ian, хотя @Christopher - я знаю, что дальше по дороге есть тележка с яблоками. Здесь продаются яблоки Granny Smith, Jonathon и даже Golden Delicious. И в конце концов, это таблица User, а не таблица Users ... - person Pete - MSFT; 31.05.2011
comment
-1 за отсутствие ссылки на какой-либо стандарт (или авторитетного автора). - person Bruce Alderson; 24.09.2011
comment
Мой папа, старый администратор БД из wayback, иногда ссылается на таблицы, использующие слово «запись», предположительно как способ применения имени экземпляра к коллекции. Другими словами, он скажет, запись WidgetUser. От него и от очень хорошего архитектора БД, которого я знаю, я инстинктивно уловил, что настоящие парни делают это необычно. - person Tom Haws; 05.12.2011
comment
AppleBag лучше всего работает в единственном числе, потому что он включает тип контейнера, но я не предпочитаю добавлять суффикс -Table к каждой создаваемой мной таблице базы данных. Точно так же не имеет смысла маркировать сумку с яблоками единственным словом Apple. - person ; 25.11.2013
comment
Дело в том, что таблица - это набор объектов. Итак, для меня очевидно, что имя таблицы должно быть во множественном числе. То есть таблица Users - это набор объектов / сущностей под названием User. - person Stack0verflow; 07.05.2015
comment
Пользователь добавлен в таблицу «Пользователи». Это все равно что сказать в Java, что переменная user принадлежит классу Users. Или сказать, что ints i лучше, чем int i, потому что i - это просто еще одна переменная int (или, в Javascript, vars i лучше, чем var i, потому что i это просто еще одна переменная). При таком подходе базу данных следует называть таблицами. - person Plap; 18.09.2015
comment
Я не считаю справедливым сравнивать таблицы с классами Java. Класс работает принципиально иначе, чем таблица БД (набор определенных элементов). Думаю, лучше сравнивать таблицы с массивами. - person Sebastianb; 02.01.2017
comment
@Plap Users - это не класс, это коллекция этого класса или список. Вы добавляете пользователя в список пользователей. - person JSON; 05.02.2019
comment
Множественное число - лучший способ. Единственный аргумент против этого не выдерживает критики - это выбор отношений. ВЫБЕРИТЕ * из пользователей, у которых Users.Name = somename. Это действительно должно быть записано как SELECT * from Users user, где user.Name = somename. Или подумайте об этом в рамках сущности. Users.Where (пользователь = ›user.Name == somename). Таблица - это совокупность сущностей, а таблица - НЕ ОТНОШЕНИЕ. Отношение - это характеристика сущности, не более того. Имена таблиц должны быть во множественном числе - person JSON; 05.02.2019

Как насчет этого в качестве простого примера:

SELECT Customer.Name, Customer.Address FROM Customer WHERE Customer.Name > "def"

vs.

SELECT Customers.Name, Customers.Address FROM Customers WHERE Customers.Name > "def"

SQL в последнем звучит более странно, чем в первом.

Я голосую за единственное.

person Community    schedule 04.04.2009
comment
В этом примере да, но в практическом sql это никогда не было бы написано таким образом. У вас был бы псевдоним таблицы, чтобы он был больше похож на SELECT C.Name, C.Address FROM Customers WHERE Customers.Name > 'def' - person Michael Haren; 22.08.2009
comment
+1, (год спустя) Вы привели УЖАСНЫЙ пример того, что единственное число имеет смысл. Это в некоторой степени религиозный спор. Несколько лет назад я был переведен на сингулярность архитектором данных, который был на много лет старше меня, и это показалось мне правильным (после того, как мне потребовалось много убеждений для перехода). - person Chris Adragna; 04.10.2010
comment
Я думаю, что sql лучше звучит во множественном числе. У вас не было бы названий таблиц для каждого столбца, почему вы так любите печатать? ВЫБЕРИТЕ Имя, Адрес ОТ клиентов ГДЕ Имя ›def Вы выбираете из пула клиентов, имя которого больше, чем def. - person jamiegs; 06.04.2011
comment
Как насчет использования псевдонима / AS, чтобы обойти эту проблему? ВЫБЕРИТЕ Customer.Name, Customer.Address FROM Customers AS Customer WHERE Customer.Name ›def - person James Hughes; 15.06.2011
comment
Второй звучит намного лучше, необычно звучит так, как будто кто-то не говорит по-английски. - person HLGEM; 30.08.2013
comment
Я знаю, что это старый, но если подумать, он выбирает имя каждого клиента, адрес клиента из таблицы клиентов. Используя множественное число, вы всегда помните, что это будет набор, который будет возвращен, даже если этот набор содержит только один элемент. - person Marco; 30.09.2019

Я твердо убежден, что в диаграмме отношений сущностей сущность должна быть отражена с единственным именем, подобно тому, как имя класса является единственным. После создания экземпляра имя отражает его экземпляр. Таким образом, в случае с базами данных сущность, превращенная в таблицу (набор сущностей или записей), имеет множественное число. Entity, User превращается в таблицу Users. Я бы согласился с другими, кто предположил, что, возможно, имя «Пользователь» можно было бы улучшить до «Сотрудник» или чего-то более подходящего для вашего сценария.

Тогда это имеет больше смысла в операторе SQL, потому что вы выбираете из группы записей, и если имя таблицы единственное, оно плохо читается.

person Community    schedule 02.01.2009
comment
Мне особенно нравится комментарий к оператору SQL. Использование единственного числа здесь не кажется интуитивным для читателя. - person hochl; 05.10.2011
comment
Отличный момент об ERD. Я подозреваю, что именно поэтому для человека, который видит мир глазами администратора баз данных, особенное именование имеет смысл. Я подозреваю, что они не понимают, как вы указываете, разницы между сущностью и их совокупностью. - person William T. Mallard; 09.05.2014
comment
Таблица - это не набор записей; таблица - это определение того, как выглядит запись. Это несоответствие, которое, кажется, есть у всего народа множественного / единственного числа. - person rich remer; 21.09.2016
comment
Я не согласен с комментарием к оператору SQL. Что делать, если вы хотите присоединиться против Users.Id - person hashtable; 30.11.2018
comment
У одной old_lady много кошек ИЛИ old_lady есть кошек. Я думаю, что ERD лучше читать во множественном числе. И таблица сущностей, таблицы имеют много сущностей, поэтому я снова думаю, что множественное число звучит хорошо. - person Harley; 08.07.2019

Я придерживаюсь единственного числа для имен таблиц и любых программных объектов.

Причина? Дело в том, что в английском есть неправильные формы множественного числа, такие как mouse ⇒ mice и Sheep ⇒ Sheep. Затем, если мне нужна коллекция, я просто использую мышек или овец и продолжаю.

Это действительно помогает множеству выделиться, и я могу легко и программно определить, как будет выглядеть набор вещей.

Итак, мое правило: все уникально, каждая совокупность вещей уникальна с добавлением s. Также помогает с ORM.

person Community    schedule 05.12.2008
comment
как насчет слова, оканчивающегося на "s"? Если у вас есть таблица с названием «Новости» (просто в качестве примера), как бы вы назвали сборник новостей? Новости? Или вы бы назвали стол «Новым»? - person Anthony; 28.08.2009
comment
Я бы назвал таблицу NewsItem и коллекцию NewsItems. - person Ash Machine; 29.08.2009
comment
Что делать, если вам нужно проверить орфографию весь код, иначе он не будет компилироваться;)? - person Hamish Grubijan; 08.06.2010
comment
@Hamish: вы действительно проверяете орфографию с помощью общих записей, таких как orderby, sbyte, const, sizeof? Напомнить мне еще раз? - person Ash Machine; 25.03.2011
comment
ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость. - person barrypicker; 15.09.2011
comment
fishs не очень хорошо работает с этим правилом. Множественное число имен коллекций в ORM не так сложно, потому что вы можете посмотреть на тип объекта, который нужно сопоставить с единственным именем таблицы. Затем свойство можно назвать как угодно, а все остальное вы можете позволить автозаполнению ide. - person Merlyn Morgan-Graham; 28.10.2011
comment
@HamishGrubijan, тогда перестань использовать Word для написания кода! ;) - person Valentino Vranken; 08.02.2012
comment
В дополнение к тому, что вы сказали, есть еще один пример: категория и категории. В Laravel Eloquent ORM используется строчная форма множественного числа в названии модели. Интересно, почему они не рассматривали единственное число как вариант по умолчанию. - person Karma; 16.09.2014
comment
Вы противоречили себе. Вы сказали, что «каждая коллекция вещей уникальна с добавлением s», но вы утверждаете, что имена таблиц должны быть в единственном числе. По вашему собственному признанию, имена таблиц должны быть множественного числа (или, как вы указали, псевдо-множественного числа), потому что таблица - это совокупность данных в единственном числе. (т.е. таблица, содержащая автомобили, представляет собой набор объектов автомобилей, поэтому ее следует называть "cars"). Если вам нравится синтаксис car.doors в единственном числе, используйте псевдоним. (т.е. выберите car.WheelCount из Cars as car, где car.Id = 44) - person Mark A. Donohoe; 09.07.2015
comment
@MarqueIV: когда я сказал, что набор вещей во множественном числе, я имел в виду коллекцию в предметной области, а не в области данных. Например, список, массив, IEnumerable будут коллекциями (множественное число). Таблица данных будет единственной. Надеюсь, это будет полезно. - person Ash Machine; 13.07.2015
comment
Все сводится к тому, называете ли вы таблицу как отдельный объект (например, CarTable) или как объекты, которые она содержит (Cars). Логическая ошибка, которую я совершаю с людьми, которые назвали бы стол «Машиной», заключается в том, что стол - это не машина! Это CarTable, который представляет собой тип объекта, эквивалентный типу данных. CarCollection (также в единственном числе). Как только вы даете этому «типу данных» имя (т.е. имя переменной), вы обычно описываете, как он используется, в данном случае контейнер / коллекция / что-то еще из объектов Car, поэтому DataType должен должно быть CarTable, но имя таблицы должно быть Cars. - person Mark A. Donohoe; 13.07.2015
comment
@MarqueIV: Хорошо, пусть будет по-вашему, как указывает SOF, ответы в основном основаны на мнении. Так что я рад, что у тебя есть твое. - person Ash Machine; 13.07.2015
comment
Аааа ... старая позиция "соглашусь, чтобы не соглашаться"! lol Достаточно честно. Я признаю это. - person Mark A. Donohoe; 14.07.2015
comment
В этом ответе есть очень хороший момент. Сопоставление класса Mouse с таблицей Mice кажется таким странным. - person Thupten; 15.07.2015

ИМХО, имена таблиц должны быть во множественном числе, например, Customers.

Имена классов должны быть в единственном числе, например Customer, если он сопоставляется со строкой в ​​таблице Customers.

person Community    schedule 30.04.2009

Единственное число. Я не верю ни в какие аргументы, которые наиболее логичны - каждый считает свои собственные предпочтения наиболее логичными. Независимо от того, что вы делаете, это беспорядок, просто выберите условность и придерживайтесь ее. Мы пытаемся сопоставить язык с очень нерегулярной грамматикой и семантикой (нормальный устный и письменный язык) с очень регулярной (SQL) грамматикой с очень специфической семантикой.

Мой главный аргумент в том, что я думаю о таблицах не как о наборе, а как о связях.

Итак, отношение AppUser сообщает, какие объекты являются AppUsers.

Отношение AppUserGroup сообщает мне, какие объекты AppUserGroups

Отношение AppUser_AppUserGroup говорит мне, как связаны AppUsers и AppUserGroups.

Отношение AppUserGroup_AppUserGroup говорит мне, как связаны AppUserGroups и AppUserGroups (т.е. группы являются членами групп).

Другими словами, когда я думаю об объектах и ​​о том, как они связаны, я думаю об отношениях в единственном числе, но, конечно, когда я думаю об объектах в коллекциях или наборах, коллекции или наборы имеют множественное число.

Итак, в моем коде и в схеме базы данных я использую единичное число. В текстовых описаниях я использую множественное число для повышения удобочитаемости, а затем использую шрифты и т. Д., Чтобы отличить имя таблицы / отношения от множественного числа.

Мне нравится думать об этом как о беспорядочном, но систематическом - и таким образом всегда существует систематически генерируемое имя для отношения, которое я хочу выразить, что для меня очень важно.

person Community    schedule 21.12.2010
comment
точно. главное, что многие люди здесь не знают, это то, что они называют ... вы даете имя отношению (отдельной записи в таблице), а не набору записей в таблице. - person Alexandre Martini; 03.12.2014
comment
Не могу больше не согласиться. «Выберите * из пользователей, имя которых похоже на« J% »», потому что я выбираю всех пользователей, имя которых начинается с «J». Если ваш аргумент состоит в том, что вы хотите написать «... где User.Name like ...», просто используйте псевдоним. По той же причине я говорю: «Дайте мне пару носков из всех доступных». - person Mark A. Donohoe; 09.07.2015
comment
Если бы я был именно таким, имя моей таблицы было бы sock_pair - person Manuel Hernandez; 03.05.2017
comment
@AlexandreMartini Совершенно верно. Как некоторые люди, которые вызывают отношение единственная запись в таблице. - person Nuno André; 20.03.2020

Я бы также выбрал множественное число, и с вышеупомянутой дилеммой Пользователи мы действительно используем подход квадратных скобок.

Мы делаем это для обеспечения единообразия между архитектурой базы данных и архитектурой приложения, исходя из того, что таблица Users представляет собой набор значений User в той же степени, что и Users Коллекция в артефакте кода - это коллекция объектов User.

То, что наша группа данных и наши разработчики говорят на одном концептуальном языке (хотя и не всегда с одинаковыми именами объектов), упрощает обмен идеями между ними.

person Community    schedule 03.12.2008
comment
Согласен .. почему несоответствие между кодом и хранилищем? Я бы никогда не назвал набор пользовательских объектов User in code ... так зачем мне так называть таблицу? Это не имеет никакого смысла. Когда я читаю приведенные выше аргументы по этому поводу, они сосредотачиваются на сущности, а не на таблице ... в моей голове есть различие между тем, что находится в таблице, чем самой таблицей. - person Jason; 13.03.2012
comment
Как вы поступаете с именем таблицы, например companies, если в других таблицах есть поле ссылки с именем company_id? Несмотря на то, что он правильно написан, он кажется непоследовательным для тех, кто разборчив в соглашениях об именах таблиц. - person Jake Wilson; 15.02.2016
comment
Помня, что единственное число companies - это company, и что этот идентификатор является ссылкой на единичный элемент. Код не должен беспокоить нас больше, чем английский язык. - person David; 04.01.2018

Лично я предпочитаю использовать имена во множественном числе для обозначения множества, просто это «звучит» лучше для моего отношения.

Именно в этот момент я использую единичные имена для определения модели данных для моей компании, потому что большинство людей на работе чувствуют себя более комфортно с ней. Иногда нужно просто облегчить жизнь всем, а не навязывать свои личные предпочтения. (вот как я оказался в этой теме, чтобы получить подтверждение того, что должно быть «лучшей практикой» для именования таблиц)

Прочитав все рассуждения в этой ветке, я пришел к одному выводу:

Я люблю свои блины с медом, независимо от того, какой у всех любимый вкус. Но если я готовлю для других, я постараюсь подать им то, что им нравится.

person Community    schedule 26.02.2013
comment
Нецелесообразно использовать такое соглашение в мире реляционных моделей, особенно когда вы описываете отношения между объектами, например В каждой команде может быть только один главный тренер и несколько второстепенных тренеров, что описывается следующим образом: Команда- ›Главный тренер, Команда - ›› Вторичный тренер - person noonex; 02.08.2015

На самом деле я всегда считал, что использование имен таблиц во множественном числе было популярным. До этого момента я всегда использовал множественное число.

Я могу понять аргумент в пользу имен таблиц в единственном числе, но для меня множественное число имеет больше смысла. Имя таблицы обычно описывает то, что она содержит. В нормализованной базе данных каждая таблица содержит определенные наборы данных. Каждая строка представляет собой объект, а таблица содержит множество объектов. Таким образом, имя таблицы во множественном числе.

Таблица автомобилей будет иметь имя cars, а каждая строка - это автомобиль. Я признаю, что указание таблицы вместе с полем table.field способом - лучшая практика и что использование единственных имен таблиц более читабельно. Однако в следующих двух примерах первое имеет больше смысла:

SELECT * FROM cars WHERE color='blue'
SELECT * FROM car WHERE color='blue'

Честно говоря, я буду переосмысливать свою позицию по этому поводу и полагаться на фактические условности, используемые организацией, для которой я разрабатываю. Тем не менее, я думаю, что для моих личных соглашений я буду придерживаться имен таблиц во множественном числе. Для меня это имеет больше смысла.

person Community    schedule 17.09.2010
comment
Разве это не конвенция и в RoR? Множественные имена для таблиц и Singular для классов ORM? Для меня это имеет большой смысл. Таблица называется cars, потому что у нее много экземпляров автомобиля, а класс называется Car, потому что он будет содержать один экземпляр автомобиля !! - person Sap; 14.07.2011
comment
@Sap Небольшое исправление последней части вашего предложения - класс Car - это абстрактный тип данных, представляющий реальный автомобиль. Будет ли он содержать один экземпляр или несколько, зависит от того, как он используется. - person asgs; 10.10.2016
comment
Давайте посмотрим правде в глаза, таблица car - это определение структуры отдельного автомобиля. Если вы посмотрите на структуру таблицы, она будет выдавать в основном id int, цветовую строку и т.д., кроме того: скажем, у вас есть таблица car_vendor (или для вашей версии множественного числа это будет cars_vendor) с внешним ключом cars_id?! что это за дерьмо? это car_id, не надо заставлять меня думать. Я сильно предпочитаю Singular - person Toskan; 04.01.2017
comment
Мне очень нравится этот ответ! Позволь мне объяснить. Если коллекция car, и вы хотите получить все от car, то есть blue, результат должен быть примерно таким, как tire, mirror, engine. И это сбивает с толку, потому что все результаты parts из car. Таким образом, имя таблицы должно быть carparts (или car_parts, CarParts как хотите) - person arnoudhgz; 06.01.2017
comment
Любой разработчик баз данных, который применяет единственные имена таблиц, по сути объявляет войну любым разработчикам приложений Ruby on Rails, которые могут вступить в контакт с этой базой данных в будущем. Строгая настойчивость Rail в использовании слов в единственном числе для классов и имен во множественном числе для таблиц позволяет реализовать множество мощных функций во многих жемчужинах экосистемы Ruby. Поэтому, даже если вы думаете, что единственное число звучит лучше, ради совместимости вам следует придерживаться множественного числа. Я полагаю, что это верно и для многих других объектно-реляционных картографов. - person Kelsey Hannan; 26.01.2018
comment
Настоящие проблемы начинаются, когда вам нужно присоединиться к SELECT cars.id, cars.name, cars.speed, cars_parts.engine, cars_parts.something FROM cars LEFT JOIN cars_parts ON cars_parts.cars_id=cars.id против SELECT car.id, car.name, car.speed, cars_part.engine, car_part.something FROM car LEFT JOIN car_part ON car_part.car_id=car.id, последний запрос более информативен, когда вам нужно упомянуть поле. - person BIOHAZARD; 24.10.2019
comment
На практике в SQL вы бы предпочли использовать псевдоним таблицы: SELECT c.id, c.name, c.speed, cp.engine, cp.something FROM cars c LEFT JOIN car_parts cp ON cp.car_id=c.id - person krozaine; 06.05.2020

Единственное число. Я бы назвал массив, содержащий кучу объектов представления строк пользователя, «пользователи», но таблица - это «таблица пользователей». Считать таблицу не чем иным, как набором содержащихся в ней строк, неправильно, ИМО; таблица - это метаданные, а набор строк иерархически прикреплен к таблице, а не сама таблица.

Я, конечно, постоянно использую ORM, и помогает то, что код ORM, написанный с множественными именами таблиц, выглядит глупо.

person Community    schedule 02.01.2009
comment
Думаю, каждому свое. Таблица реляционной базы данных по определению является заголовком (т. Е. Метаданными, называющими атрибуты) и набором кортежей, соответствующих заголовку. Вы можете сосредоточиться на метаданных, тогда как другие сосредоточатся на кортежах. :-) - person Bill Karwin; 03.01.2009
comment
Привет, мне нравится имя User_Table! :) - person Camilo Martin; 09.05.2010
comment
ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость. - person barrypicker; 15.09.2011
comment
Я смотрю на это так ... если вы создаете массив / список / словарь чего-либо в коде, держу пари, что вы назовете его множественным именем того, что он содержит. Если вы используете ORM для абстрагирования своей базы данных, таблицы представлены в виде какой-то коллекции, так почему бы вам относиться к ним иначе? Использование имен в единственном числе может показаться хорошим, но вы всегда боретесь со своим инстинктом, что таблица содержит много одного и того же, как и коллекция в коде. Почему несогласованность? - person Jason; 13.03.2012
comment
@Jason: Пожалуйста, сравните и сопоставьте то, как читаются эти вещи: 1) $db->user->row(27), $db->product->rows->where(something) 2) $db->users->row(27), $db->products->rows->where(something). - person chaos; 13.03.2012
comment
В SQLAlchemy примерами могут быть User.query.get(27) или User.query.filter(User.id == 27).one() и Product.query.filter(something).all(), независимо от того, как называются таблицы. Как сказал @barrypicker, ORM, который вы используете, недостаточно гибкий. - person sayap; 24.11.2012
comment
@barrypicker Грамматика не должна диктовать соглашения о программировании (знаете ли вы, что java beans - это идиотизм?). Его следует соблюдать, пока он не мешает. Возможность использовать другое отображение в ORM есть в тех случаях, когда это необходимо. Грамматика очень необычна, и такие вещи, как матрицы против матриц, являются редкими, но яркими примерами того, почему код не должен быть заражен этим. - person maaartinus; 05.05.2018

Мы используем аналогичные стандарты, при написании сценариев мы запрашиваем [] вокруг имен и, где это уместно, квалификаторы схемы - в первую очередь это защищает ваши ставки от будущих захватов имен синтаксисом SQL.

SELECT [Name] FROM [dbo].[Customer] WHERE [Location] = 'WA'

Это спасало наши души в прошлом - некоторые из наших систем баз данных работали более 10 лет, начиная с SQL 6.0 и заканчивая SQL 2005, - намного больше, чем предполагаемый срок службы.

person Community    schedule 03.12.2008
comment
Похоже на ритуальное самобичевание. Происходили ли такие захватывающие имена? - person Kjetil S.; 21.02.2019

Мне не нравятся имена таблиц во множественном числе, потому что некоторые существительные в английском языке не подлежат исчислению (вода, суп, деньги) или значение меняется, когда вы делаете их счетными (курица против курицы; мясо против птицы). Мне также не нравится использовать аббревиатуры для имени таблицы или имени столбца, потому что это добавляет дополнительный уклон к и без того крутой кривой обучения.

По иронии судьбы, я могу сделать User исключение и назвать его Users из-за USER (Transac-SQL ), потому что я тоже не люблю использовать скобки вокруг таблиц, если мне это не нужно.

Мне также нравится называть все столбцы идентификаторов Id, а не ChickenId или ChickensId (что с этим делают парни во множественном числе?).

Все это потому, что у меня нет должного уважения к системам баз данных, я просто повторно применяю знания одного трюка и пони из соглашений об именах OO, таких как Java по привычке и лени. Я бы хотел, чтобы среда IDE лучше поддерживала сложный SQL.

person Community    schedule 03.12.2008
comment
Мы, парни, использующие множественное число, либо называем столбец «id» «id», как вы, либо «singular_id». Я считаю, что таблицы должны быть множественного числа (думайте о них как о массивах), но имена столбцов должны быть в единственном числе (атрибуты одного элемента). - person mpen; 04.04.2009
comment
plu_ral / PluRal для имен таблиц, singular_id / singularId для первичных ключей. - person hochl; 05.10.2011

Таблицы: множественное число

В таблице пользователей указано несколько пользователей.

Модели: единичные

Единственного пользователя можно выбрать из таблицы пользователей.

Контроллеры: множественное число

http://myapp.com/users перечислит нескольких пользователей.

Во всяком случае, это мое мнение.

person Community    schedule 25.11.2009
comment
Ближе к моему мнению, но я считаю, что хранение нескольких пользователей в таблице на самом деле является случайным, и что любой отдельный пользователь представлен таблицей или, скорее, отношением, которое представляет собой набор кортежей, представляющих объект User. - person ProfK; 26.11.2009
comment
Думаю, я склонен с этим согласиться. Меня только смущает, почему модели должны быть единичными? Только если модель касается только одного пользователя. Если бы я запрашивал базу данных, чтобы получить всех пользователей, тогда мне нужно было бы получить доступ к модели? Для одного экземпляра не имеет смысла извлекать все записи, например: $ user- ›get_all () // не имеет смысла - person ; 05.04.2020

Система tables/views самого сервера (SYSCAT.TABLES, dbo.sysindexes, ALL_TABLES, information_schema.columns и т. Д.) Почти всегда имеет множественное число. Думаю, ради последовательности я последую их примеру.

person Community    schedule 03.12.2008
comment
Microsoft - это то, чем они являются, в первую очередь по бизнес-причинам (и зачастую по неэтичным причинам), а в последнюю очередь по логическим причинам. Единственная причина, по которой я следил за ними, было бы то, что они большие гориллы, и все остальные идут этим путем. Когда у меня есть выбор, я выбираю другой путь. - person Bruce Patin; 30.11.2012
comment
Следует отметить, что information_schema является частью ISO / IEC 9075-11, стандарта SQL. И да, он использует множественные имена таблиц / представлений. - person Paulo Freitas; 29.05.2018

Я поклонник единичных имен таблиц, поскольку они упрощают чтение моих диаграмм ER, использующих синтаксис CASE, но, читая эти ответы, у меня возникает ощущение, что они никогда не прижились? Лично мне это нравится. Есть хороший обзор с примерами того, насколько удобочитаемыми могут быть ваши модели, когда вы используете единичные имена таблиц, добавляете глаголы действия к своим отношениям и формируете хорошие предложения для любых отношений. Это немного излишне для базы данных из 20 таблиц, но если у вас есть БД с сотнями таблиц и сложной конструкцией, как ваши разработчики когда-либо поймут это без хорошо читаемой диаграммы?

http://www.aisintl.com/case/method.html

Что касается префиксов таблиц и представлений, я абсолютно ненавижу эту практику. Не давайте человеку никакой информации, прежде чем сообщать ему, возможно, неверную информацию. Любой, кто просматривает базу данных для объектов, может довольно легко отличить таблицу от представления, но если у меня есть таблица с именем tblUsers, которую по какой-то причине я решаю реструктурировать в будущем на две таблицы, с целью объединения их, чтобы не нарушать старый код Теперь у меня есть представление с именем tblUsers. На данный момент у меня остались два непривлекательных варианта: оставить представление с префиксом tbl, которое может сбить с толку некоторых разработчиков, или заставить другой уровень, либо средний уровень, либо приложение быть переписанным, чтобы ссылаться на мою новую структуру или имя viewUsers. Это сводит на нет большую часть ценности просмотров ИМХО.

person Community    schedule 02.01.2009
comment
Хороший пример ловушки при добавлении к именам объектов префикса квалификатора type! - person Kenny Evitt; 08.11.2010

Если мы посмотрим на MS SQL Server's системные таблицы, их имена, присвоенные Microsoft, находятся в plural.

Системные таблицы Oracle названы в singular. Хотя некоторые из них имеют множественное число. Oracle рекомендует использовать множественное число для имен таблиц, определяемых пользователем. Не имеет большого смысла рекомендовать одно, а следовать другому. То, что архитекторы этих двух софтверных гигантов назвали свои таблицы, используя разные соглашения, тоже не имеет особого смысла ... В конце концов, что это за ребята ... доктора наук?

Я помню, что в академических кругах рекомендация была единственной.

Например, когда мы говорим:

select OrderHeader.ID FROM OrderHeader WHERE OrderHeader.Reference = 'ABC123'

может быть, b / c каждый ID выбирается из определенной единственной строки ...?

person Community    schedule 02.11.2012
comment
Microsoft - это то, чем они являются, в первую очередь по бизнес-причинам (и зачастую по неэтичным причинам), а в последнюю очередь по логическим причинам. Единственная причина, по которой я следил за ними, было бы то, что они большие гориллы, и все остальные идут этим путем. Когда у меня есть выбор, я выбираю другой путь. - person Bruce Patin; 30.11.2012
comment
Две вещи. Во-первых, вы обычно не используете имена таблиц и пишете 'select ID FROM OrderHeaders WHERE Reference =' ABC123 ', потому что вы «выбираете все идентификаторы из OrderHeaders, где что-то истинно», но если бы вам пришлось использовать имена таблиц из-за присоединиться или что-то в этом роде, вы должны использовать такой псевдоним ... 'выберите OrderHeader.ID FROM OrderHeaders как OrderHeader ГДЕ OrderHeader.Reference =' ABC123 ' - person Mark A. Donohoe; 09.07.2015

Я всегда использовал единственное число просто потому, что меня этому учили. Однако, создавая новую схему недавно, впервые за долгое время, я активно решил сохранить это соглашение просто потому, что ... оно короче. Добавление буквы «s» в конец имени каждой таблицы кажется мне таким же бесполезным, как добавление «tbl_» перед каждым именем.

person Community    schedule 21.10.2010

Это может быть немного излишним, но я бы посоветовал проявить осторожность. Не обязательно, что переименовывать таблицы - плохо, но стандартизация - это просто так; стандарт - эта база данных может быть уже "стандартизирована", но плохо :) - я бы посоветовал обеспечить согласованность как лучшую цель, учитывая, что эта база данных уже существует и, предположительно, она состоит из более чем двух таблиц.

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

Практическая последовательность иногда бывает лучшим стандартом ... :)

my2cents ---

person Community    schedule 03.12.2008

Возможные альтернативы:

  • Переименуйте таблицу в SystemUser
  • Используйте скобки
  • Сохраните имена таблиц во множественном числе.

ИМО с использованием скобок технически является наиболее безопасным подходом, хотя и немного громоздким. ИМО, это 6 из одного, полдюжины другого, и ваше решение действительно сводится к личным / командным предпочтениям.

person Community    schedule 03.12.2008
comment
Мне нравится ваша идея с «префиксом», но я бы назвал ее SystemUser. - person ProfK; 05.12.2008

Я считаю, что семантика зависит от того, как вы определяете свой контейнер. Например, «мешок яблок» или просто «яблоки», или «мешок для яблок», или «яблоко».

Пример: таблица "колледж" может содержать 0 или более колледжей, таблица "колледжи" может содержать 0 или более коллег.

a "student" table can contain 0 or more students 
a table of "students" can contain 0 or more students.

Я пришел к выводу, что это нормально, но вы должны определить, как вы (или люди, взаимодействующие с этим) собираетесь подходить к таблицам; "таблица x" или "таблица xs"

person Community    schedule 04.10.2011

Как уже упоминалось здесь, условные обозначения должны быть инструментом, повышающим простоту использования и читаемость. Не как кандалы или дубинки для мучений разработчиков.

Тем не менее, я лично предпочитаю использовать единственные имена как для таблиц, так и для столбцов. Вероятно, это связано с моим опытом программирования. Имена классов обычно используются в единственном числе, если они не являются своего рода коллекцией. На мой взгляд, я храню или читаю отдельные записи в рассматриваемой таблице, поэтому единственное число имеет для меня смысл.

Эта практика также позволяет мне зарезервировать множественные имена таблиц для тех, которые хранят отношения «многие ко многим» между моими объектами.

Я также стараюсь избегать зарезервированных слов в именах таблиц и столбцов. В рассматриваемом здесь случае имеет смысл пойти вразрез с единым соглашением для пользователей, чтобы избежать необходимости инкапсулировать таблицу, которая использует зарезервированное слово User.

Мне нравится ограниченно использовать префиксы (tbl для имен таблиц, sp_ для имен процессов и т. Д.), Хотя многие считают, что это добавляет беспорядка. Я также предпочитаю имена CamelBack подчеркиванию, потому что я всегда нажимаю + вместо _ при вводе имени. Многие не согласны.

Вот еще одна хорошая ссылка для рекомендаций по соглашению об именах: http://www.xaprb.com/blog/2008/10/26/the-power-of-a-good-sql-naming-convention/

Помните, что наиболее важным фактором в вашем соглашении является то, что оно имеет смысл для людей, взаимодействующих с рассматриваемой базой данных. Когда дело доходит до соглашений об именах, не существует «единого кольца для управления ими всеми».

person Community    schedule 03.12.2008
comment
Игнорируя ужасы венгерской нотации. Никогда, никогда, никогда не используйте sp_ перед хранимыми процедурами, потому что MS-SQL использует это для системных хранимых процедур и обрабатывает их особым образом. Поскольку процедуры sp_ хранятся в главной таблице, MS-SQL всегда сначала ищет их, даже если вы уточняете расположение. - person Will Dieterich; 08.12.2008

Я думаю, что использование единственного числа - это то, чему нас учили в университете. Но в то же время вы можете возразить, что, в отличие от объектно-ориентированного программирования, таблица не является экземпляром своих записей.

Я думаю, что сейчас склоняюсь в пользу единственного числа из-за неправильности множественного числа в английском языке. В немецком языке дела обстоят еще хуже из-за отсутствия согласованных форм множественного числа - иногда вы не можете определить, является ли слово множественным числом или нет, без уточняющего артикля перед ним (der / die / das). И в китайских языках все равно нет форм множественного числа.

person Community    schedule 10.03.2010
comment
В университете меня учат множественному числу для таблиц, у меня также есть книга, третье издание управления БД из 90-х, таблицы в единственном числе; у меня также есть обновленная копия, 11e, имена в единственном числе и некоторые сокращенные имена, а в разделе XML используется множественное число. \ n Но если вы проверите фактическое содержимое для разделов СУБД, это буквально все тот же текст с некоторыми изображениями, получившими подтяжку лица. \ n Контрольный список моделирования данных ничего не говорит о множественном и единственном числе, просто сущности должны отображаться только на один объект, вероятно, это то, что они пытались реализовать в книгах. - person Marco; 30.09.2019

Однажды я использовал "Dude" для таблицы User - такое же короткое количество символов, никаких конфликтов с ключевыми словами, все еще ссылка на обычного человека. Если бы меня не беспокоили идиоты, которые могут увидеть код, я бы так и оставил.

person Community    schedule 30.11.2012

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

(Я считаю, что рациональное решение этой политики состоит в том, что генераторы кода ORM могут с легкостью создавать классы объектов и коллекций, поскольку легче создать множественное имя из единственного имени, чем наоборот)

person Community    schedule 03.12.2008
comment
Это соглашение было частью теории отношений задолго до того, как существовала ORM. - person ProfK; 05.12.2008
comment
ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость. - person barrypicker; 15.09.2011

Я использую только существительные для имен своих таблиц, которые пишутся одинаково, в единственном или множественном числе:

лось рыба олень самолет штаны шорты очки ножницы виды потомство

person Community    schedule 27.05.2012

Я не видел этого четко сформулированного ни в одном из предыдущих ответов. Многие программисты не имеют в виду формального определения при работе с таблицами. Мы часто интуитивно общаемся с помощью «записей» или «строк». Однако, за некоторыми исключениями для денормализованных отношений, таблицы обычно проектируются так, что отношение между неключевыми атрибутами и ключом составляет теоретико-множественную функцию.

Функцию можно определить как подмножество перекрестного произведения двух наборов, в котором каждый элемент набора ключей встречается не более одного раза в отображении. Следовательно, терминология, возникающая с этой точки зрения, имеет тенденцию быть единственной. Такое же единственное (или, по крайней мере, не множественное) соглашение можно увидеть в других математических и вычислительных теориях, включающих функции (например, в алгебре и лямбда-исчислении).

person Community    schedule 18.02.2013

Руководства действительно существуют именно так. Это не «высечено в камне», поэтому у вас есть возможность игнорировать их.

Я бы сказал, что логически более интуитивно понятнее иметь имена таблиц во множественном числе. В конце концов, таблица - это совокупность сущностей. В дополнение к другим упомянутым альтернативам я часто вижу префиксы в именах таблиц ...

  • tblUser
  • tblThis
  • tbl Это
  • tblTheOther

Я не предлагаю, чтобы это был правильный путь, я также вижу, что пробелы используются МНОГО в именах таблиц, которые я ненавижу. Я даже встречал названия полей с идиотскими символами вроде? как бы говоря, это поле отвечает на вопрос.

person Community    schedule 03.12.2008
comment
Согласованный. Пробелы и префиксы от Дьявола. - person Dave Markle; 03.12.2008
comment
MSAccess поддерживает имена таблиц с пробелами. Я подозреваю, что многие таблицы MSSQL в пробелах были импортированы оттуда. - person James Curran; 03.12.2008
comment
+1 снова. Таблицы и поля, обозначенные пробелами, - это отличительная черта одаренного ребенка Office Junior, создающего для Берил настоящее приложение для удобного доступа к учетной записи :-). - person Cruachan; 03.12.2008
comment
Эй, мне нравится Берил в учетных записях ... но это никогда не заставит меня помещать префиксы или пробелы в имена моих таблиц ... и при этом я не буду ставить вопросительные или восклицательные знаки в имена моих полей. Меня не волнует, какая она милашка. :П - person BenAlabaster; 03.12.2008
comment
tbl как приставка - это сын порождения дьявола и вонючей падали, но семантические приставки немного лучше. В нашем основном приложении мы, Chase Software, ставим перед всеми нашими таблицами префикс «ca» или «cs», что означает приложение преследования или систему преследования. - person ProfK; 05.12.2008
comment
(продолжение) Таблицы ca - это бизнес-таблицы, которые регулярно меняются при повседневном использовании, например, caDocument, который представляет собой счета, заказы на закупку, ведомости затрат и т. д. Таблицы cs больше предназначены для навигации и т. д., например csForm, который мы используется для навигации между формами (страницами) и обычно изменяется только нами. - person ProfK; 05.12.2008
comment
Однажды я потратил часы, пытаясь выбрать из таблицы с префиксом одиночный начальный пробел. Я думал, что сошёл с ума. - person scipilot; 29.12.2013

SQL-определение таблицы на самом деле является определением одной потенциальной строки таблицы, а не коллекции. Следовательно, имя, используемое в этом определении, должно обозначать тип строки, а не имя коллекции. Людям, которые предпочитают множественное число, потому что оно хорошо читается в их английских утверждениях, необходимо начать думать более логично и взглянуть на всю логику и программный код, связанный с фактическим использованием таблицы. В этих комментариях упоминается несколько очень веских причин для использования единственных имен таблиц. К ним относятся очень веские причины НЕ использовать имена таблиц во множественном числе. «Хорошо читать» вообще не должно быть поводом, тем более, что некоторые могут прочитать эту идею по-другому.

person Community    schedule 30.11.2012
comment
Нет, определение таблицы в SQL - это определение всех строк, которые будут в этой таблице, а не одной потенциальной строки, как вы сказали. В качестве примера, используя ваше определение, если я скажу, что в описании одного потенциального свидания на этих выходных будет рыжий, это не будет означать, что я также не могу встречаться с брюнеткой. Однако утверждение, что все потенциальные свидания на этих выходных - рыжие, не допустит этого, а это именно то, что делает стол. Он ограничивает все строки, чтобы они соответствовали этому описанию, или, другими словами, это описание для всех строк - слово «строки» имеет множественное число, следовательно, таблица должна быть такой же. - person Mark A. Donohoe; 09.07.2015
comment
Расширяя эту идею, каждый столбец в определении также должен быть во множественном числе. - person Bruce Patin; 03.11.2017
comment
Я понимаю, как вы к этому пришли, но я бы сказал, что это потому, что вы смотрите на столбец как на контейнер, а это не так. Другими словами, столбец - это просто метаданные для хранения свойства строки. Сами по себе столбцовые данные не существуют вне строки, потому что строка - это то место, где они хранятся. Когда вы запрашиваете столбец, вы запрашиваете строки для данных этого столбца. Вы не запрашиваете столбец автономно. Строка - это сущность. Таблица представляет собой набор этих сущностей. Столбец - это просто свойство этой сущности. - person Mark A. Donohoe; 03.11.2017
comment
Я шутил. Таблица может содержать набор строк, но определение таблицы не является определением коллекции, это определение строки таблицы и, следовательно, должно быть единичным. Если вы перейдете к преобразованию определений таблиц в определения классов программ, которые с этим работают, все это будет предельно ясно. - person Bruce Patin; 07.11.2017

Если ты уйдешь, будут проблемы, но если ты останешься, их будет вдвое больше.

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

person Community    schedule 03.12.2008

Я просто выскажу свое мнение, почему я использую единственные имена.

Например, мне нужно получить все поля от пользователя:

-- Select every fields from 'user' table
SELECT * FROM user

Мне нужно имя пользователя, которому 21 год:

-- Select every fields from 'user' table which have 21 years old
SELECT * FROM user WHERE age = '21'

Конечно, множественное число можно использовать тем же способом, но для моего мозга, чтобы читать, я действительно думаю, что это правильный путь.

person Community    schedule 20.01.2009
comment
Я не согласен; В базе данных оракула есть системная таблица с именем USER, теперь вы должны решить назвать ее APP_USER или что-то в этом роде. Но, учитывая, что в любом случае лучше сказать ВЫБРАТЬ ВСЕ ИЗ ПОЛЬЗОВАТЕЛЕЙ, я бы просто назвал все таблицы множественным числом моих сущностей, чтобы не конфликтовать с какой-либо системной таблицей. - person cosbor11; 20.06.2015
comment
Мне нравится выбирать из users или userTable, но не user. С Singular это звучит так, как будто вы получаете только одну пластинку. Я вижу, что вам нравится думать, что нужно выбирать столбцы из таблицы. Больше всего нравится думать, что select возвращает строки из таблицы, поэтому имя коллекции звучит логично. - person Thupten; 15.07.2015
comment
Я дам вам свои 2 цента. Будет ли ваша таблица базы данных состоять из одной строки или нескольких строк? Это как сказать: у меня в обеих руках по пять яблок. Тем не менее, мы оба согласны с тем, что правильной фразой будет: у меня пять яблок в обеих руках. Почему мы хотим изменить этот вопрос для базы данных? Как только вы назначите userTable в качестве имени, у нас будет 1 таблица, которая фактически уже определяет существование нескольких строк данных. Однако я бы тоже этого не сделал. Я предпочитаю использовать множественное число. Поскольку age = '21', скорее всего, вернет более 1 строки, не так ли? - person Mike M.; 12.12.2015
comment
Единственное число - это стандарт. - person danger89; 26.01.2016
comment
Посмотрите на такие языки приложений, как ActiveRecord от Rail. Он строго обеспечивает разделение с именами таблиц во множественном числе и их объектами в единственном числе. Из следования этому соглашению получается так много удивительных вещей, и вы причиняете вред своей команде разработчиков, которая собирается рассуждать со своей системой, не следуя ему. - person Kelsey Hannan; 26.01.2018
comment
За исключением того, что приходится иметь дело с нестандартным множественным числом в ActiveRecord ... Я всегда использовал множественные имена таблиц, но множественное число обязательно создает неприятности - как в стандартах ORM, так и в стандартах JSON, - которых никогда не бывает с единственными именами таблиц. - person kevlarr; 04.04.2018
comment
+ Келси Ханнан Точка зрения ярмарки, хотя некоторым людям нравится единственное число, но некоторые фреймворки (например, Rails) используют множественное число в качестве своего соглашения ... поэтому иногда выбор единственного и множественного числа зависит от проекта .... - person twknab; 25.09.2018
comment
«Выбрать все поля из таблицы« пользователь », которым 21 год» - ›Выбрать каждое поле для каждого пользователя (нескольких), которому 21 год. Так что логичнее использовать множественное число. - person Simon Fakir; 15.11.2018

Не существует "соглашения", которое требовало бы, чтобы имена таблиц были единственными.

Например, у нас была таблица с именем "REJECTS" в базе данных, используемой процессом оценки, содержащая записи, отклоненные из одного запуска программы, и я не вижу причин не использовать множественное число для этой таблицы (называть ее "REJECT" было бы просто смешно или слишком оптимистично).

По поводу другой проблемы (цитаты) это зависит от диалекта SQL. Oracle не требует заключать имена таблиц в кавычки.

person Community    schedule 03.12.2008
comment
Sql Server требует фигурных скобок только для имен, которые являются зарезервированными ключевыми словами (User is one). Я считаю, что у Oracle такая же политика - person Jimmy; 03.12.2008

Если вы используете определенные фреймворки, такие как Zend Framework (PHP), разумно использовать множественное число для классов таблиц и единственное для классов строк.

Скажем, вы создали объект таблицы $ users = new Users () и объявили класс строки как User, вы также сможете вызвать new User ().

Теперь, если вы используете единственное число для имен таблиц, вам нужно будет сделать что-то вроде new UserTable () с строкой new UserRow (). Мне это кажется более неуклюжим, чем наличие объекта Users () для таблицы и объектов User () для строк.

person Community    schedule 03.12.2008
comment
Это неправда. Zend_Db не требует соглашения об именах для имен таблиц базы данных, имен классов таблиц или имен классов строк. Я сам удалил этот непродуманный код перегиба. - person Bill Karwin; 03.12.2008
comment
Но я поддерживаю соглашение о множественном числе имен классов таблиц и единственном числе имен классов строк. Просто фреймворк Zend_Db не требует соблюдения каких-либо соглашений. - person Bill Karwin; 03.12.2008
comment
только что повторно посетил мой пост и исправил его. правда, это ничего не навязывает. он просто предлагает это. - person markus; 13.03.2009
comment
Для стола нет класса. Любой класс, сопоставленный с таблицей, на самом деле описывает строку, а не таблицу. Единственное соответствие классу для таблицы - это то, которое явно описывает коллекцию. - person Bruce Patin; 30.11.2012

Имя ТАБЛИЦЫ - это ОДНО определение структуры таблицы. Имя VIEW или QUERY - это ОДНО определение представления или запроса (нескольких) таблиц. ТАБЛИЦА, ПРОСМОТР или ЗАПРОС могут содержать одно из следующего:

0 записей 1 запись Много записей.

Зачем вам нужно ставить букву «s» в конце имени одного объекта? Что вы хотите обозначить, поставив букву «s» в конце имени объекта?

Если вы хотите различать, добавьте _tbl. Представление - это _vew (а не глупое соглашение о _v).

Минимум 3 символа суффикса - это останавливает эту дискуссию.

Таблица - это объект БД, ничем не отличающийся от других.

Сохранение трех знаков ничего не спасает, кроме ясности смысла.

Красный ;-)

person Community    schedule 09.04.2012
comment
Насколько сложнее добавить «Table», чем «_tbl»? - person ProfK; 28.05.2012
comment
Для большей ясности определение таблицы на самом деле является определением ОДНОЙ потенциальной строки. - person Bruce Patin; 30.11.2012
comment
По вашему собственному определению вы дали двум разным объектам одно и то же имя ... объект, который будет помещен в таблицу, и таблицу, которая содержит эти объекты. Если я говорю «Автомобиль», я имею в виду таблицу или запись в этой таблице? Если я говорю «Машины», это ясно, что я имею в виду вещь, которая содержит ноль или более автомобильных объектов. Использование множественного числа правильно отличает предмет от того, что его держит. если бы вы сказали CarTable, это единственное число. Но без суффикса «таблица» вы должны дать ему имя, представляющее то, что в нем содержится. На «Sock Drawer» (единственном числе) есть этикетка (название) «Socks». - person Mark A. Donohoe; 09.07.2015

Я всегда использую единичные имена таблиц, но, как уже говорилось, самое главное - быть последовательными и использовать одну и ту же форму для всех имен.

Что мне не нравится в именах таблиц во множественном числе, так это то, что комбинированные имена могут быть довольно странными. Если, например, у вас есть таблица с именем Users и вы хотите сохранить свойства для пользователя, это приведет к таблице с именем _2 _...

person Community    schedule 23.11.2009
comment
Нет, на самом деле это будет называться «UserProperties», поскольку они являются свойствами пользовательских объектов (строк), которые хранятся в таблице, а не свойствами самой пользовательской таблицы. Выражение «UsersProperties» будет означать, что они являются свойствами таблицы пользователей (например, RowCount, MaxRows и т. Д.), Тогда как UserProperties четко обозначает те свойства, которые относятся к пользователю (например, UserName, Age, SSN и т. Д.) - person Mark A. Donohoe; 09.07.2015

При поиске хорошего соглашения по именованию возникает следующая путаница, которую я должен назвать:

1) в соотв. к тому, что содержится в таблице, например: таблица пользователей. Всегда будет множественное число. Итак, Пользователи

2) в соотв. к тому, что содержится в записи, например: запись в таблицах пользователей будет одним пользователем. SO, Пользователь.

Теперь проблема в основном для пользователей. случай 1: соотв. к первому соглашению об именах, users_roles Что это имя предполагает, пользователей и их роли.

случай 2: в соотв. ко второму соглашению об именах, user_role Что означает это имя, user и его роли.

Хорошее соглашение об именах должно дать дополнительное представление об отношениях сущностей, особенно когда хранятся отношения "многие ко многим".

Здесь, согласно сценарию, мы должны идентифицироваться как наборы информации.

В таблице пользователей все сформированные множества являются уникальными пользователями. В таблице ролей все сформированные наборы представляют собой уникальные роли. В таблице отношений между пользователями и ролями можно сформировать наборы пользователей с разными ролями, что дает представление о сохраненных отношениях «1-много».

I would prefer,
Users table => user
Roles table => role
users role relationship table => user_roles
person Community    schedule 30.06.2013

На обоих сайтах разные бумаги, думаю, нужно только выбрать свою сторону. Лично я предпочитаю Plurar для именования таблиц и, конечно, Singular для именования столбцов.

Мне нравится, как вы это читаете:

SELECT CustomerName FROM Customers WHERE CustomerID = 100;

На самом деле у нас есть ООП, и это здорово, но большинство людей продолжают использовать реляционные базы данных, а не объектные базы данных. Нет необходимости следовать концепциям ООП для реляционных баз данных.

Другой пример, у вас есть таблица Teams, которая хранит TeamID, TeamColor, но также PlayerID, и будет иметь одинаковые teamID и TeamColor для определенного количества PlayerID ...

К какой команде принадлежит игрок?

SELECT * FROM Teams WHERE PlayerID = X

Все игроки из X Team?

SELECT * FROM Players INNER JOIN Teams ON Players.PlayerID = Teams.PlayerID WHERE Teams.TeamID = X

Тебе все это хорошо?

В любом случае, также обратите внимание на соглашения об именах, используемые W3Schools:

http://www.w3schools.com/sql/sql_join_inner.asp

person Community    schedule 30.08.2013
comment
Похоже, что база данных лиги нуждается в некоторой нормализации, но я согласен с вашей точкой зрения. - person Nuno André; 20.03.2020

Я решил ту же проблему, назвав таблицу «Сотрудник» (на самом деле «Сотрудники»). Я стараюсь держаться как можно дальше от любых конфликтов с возможно зарезервированными словами. Даже «Юзеры» мне неприятно близки.

person Community    schedule 03.12.2008
comment
Проблема заключается в том, что вы знаете о зарезервированных словах только в момент написания приложения - этот пул слов будет со временем дрейфовать по мере совершенствования языка. Определение слова как имени с квадратным пареном - единственный способ облегчить эту боль. - person stephbu; 03.12.2008
comment
За счет удобочитаемости, что довольно проблематично в операторах sql. - person dkretz; 03.12.2008
comment
Полностью согласен - CAPS для ключевых слов, Camelcase и т. Д. Для имен помогает немного улучшить это, но все же снижает удобочитаемость. - person stephbu; 04.12.2008
comment
Сотрудники не всегда могут быть пользователями. - person ProfK; 05.12.2008
comment
Нет, в таких случаях это не подходит. Но для других случаев, возможно, есть другое слово (например, участники, люди или что-то подобное, которое позволит вам избегать пользователей и снизить вероятность столкновения с чем-то. - person dkretz; 05.12.2008