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

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

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

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

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

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

outis 02.03.2012 05:37

Английский не является моим родным языком, может кто-нибудь дать мне пример названия Singular и Plural?

GusDeCooL 08.11.2012 21:58
codeproject.com/Articles/309304/…
Mr Spark 11.11.2012 18:42

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

andygavin 22.09.2015 01:31

@andygavin ну, я работаю в системе, где единственное и множественное число смешано (возможно, как вы предлагаете, я мог бы проверить это, но я подозреваю, что это было слишком много поваров), потребовалось время, прежде чем вы все поняли (intellisense - это всегда слишком медленно для меня ...)

Erk 01.04.2016 00:31

Одним из способов решения загадки ключевого слова было бы добавление короткого префикса, например, «t» для таблиц (tUser [s]), «v» для представлений и т. д., Но не рекомендуется для атрибутов (не нужно «aGroup» или похожие!)

Erk 01.04.2016 00:35

Должно быть во множественном числе! List <String> names ==> StringList имен, UserCollection пользователей, Collection пользователей, UserTable пользователей, AppleBag красных яблок ... звоните в какие-нибудь колокола? имя класса будет «Пользователь», «Apple» и т. д.

sojin 29.04.2016 16:04

Оба из них: например, у меня есть таблица с именем Users, и это нормально, тогда у меня есть таблица с именем User_Transactions, а не Users_Transactions. Затем представьте, что у вас есть эта таблица: user_categories, которая просто содержит категории, тогда у вас есть связанная таблица с именем users_categories, поскольку пользователь может быть в другой категории ... Я надеюсь, что это дает идею

albanx 12.08.2016 15:48

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

user2654834 27.01.2017 18:49

Я бы выбрал обычную практику экосистемы, в которой вы работаете. Например: в Node.js ORM, такие как Bookshelf.js или Objection.js, в основном основаны на «Knex.js». А в документации «Knex.js» вы найдете имена таблиц во множественном числе. Так что я бы выбрал множественное число в этой области. Источник: knexjs.org/#Schema-createTable

Benny Neugebauer 07.09.2017 23:58
Открыть заново. Этот вопрос касается эффективности и надежности программирования. Хотя мнений предостаточно, самые популярные ответы содержат факты, ссылки и конкретный опыт.
Bob Stein 04.11.2017 00:20

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

Zac Faragher 19.12.2017 03:45

ВСТАВИТЬ клиентов (имя) ЗНАЧЕНИЯ («Алиса»). Не: ВСТАВИТЬ клиента (имя) СО ЗНАЧЕНИЯМИ («Алиса»). ВЫБРАТЬ ИЗ клиентов, ГДЕ name = "Алиса". Не: ВЫБРАТЬ клиента С именем = "Алиса". УДАЛИТЬ ОТ клиентов, ГДЕ id = 1. Не: УДАЛИТЬ клиента С id = 1. ОБНОВИТЬ клиентов SET email = "[email protected]" WHERE name = "Alice". Не: ОБНОВЛЯЙТЕ клиента с помощью name = "Alice" SET email = "[email protected]".

Toxiro 21.02.2018 14:49

Да, я согласен. Имеет смысл иметь таблицу пользователей и одновременно называть ее «AppUser»; также имеет смысл иметь таблицу правил, применимых к определенному типу пользователей, и называть ее «UserRules».

Arindam 26.12.2018 09:02

@Arindam "UserRule" или "UsersRule" определенно не звучит правильно в качестве названия для списка правил, связанных с пользователем. Это сильный аргумент против использования единственного числа!

bitoolean 24.04.2019 19:31

Я рекомендую это руководство по стилю: sqlstyle.guide

asmaier 08.04.2020 19:30

С практической точки зрения: когда я использую EF и созданные им сущности, имеет больше смысла использовать, например, new Order, чем new Orders, при создании новой записи заказа.

Kai Hartmann 10.11.2020 12:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
1 566
17
427 613
41
Перейти к ответу Данный вопрос помечен как решенный

Ответы 41

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

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

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

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


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

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

ProfK 05.12.2008 17:49

Отношение состоит из заголовка и тела. Заголовок - это набор атрибутов. Тело (n-арного отношения) - это набор из n кортежей. Заголовок отношения также является заголовком каждого его кортежа. [en.wikipedia.org/wiki/Relational_model]

ProfK 05.12.2008 18:02

Что делать, если у вас есть пакет с 5 яблоками внутри? Вы называете это мешком с яблоками? или мешок яблок?

Christopher Mahan 03.01.2009 10:30

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

Mark Brackett 04.04.2009 06:16

Как бы вы определили в своем коде массив объектов Apple? Apple apples[100] или Apple apple[100]

joshperry 21.08.2010 04:54

@Christopher, если смысл существования мешка состоит в том, чтобы хранить яблоки и только яблоки, то это «мешок для яблок», независимо от того, содержит ли он 1 яблоко, 100 яблок или не содержит яблок.

Ian Mackinnon 07.10.2010 23:58

@ Ян: Это потому, что таблица является универсальной, и ее можно сравнить с транспортным контейнером (может содержать почти все, от ящиков для яблок до ящиков с мотоциклами Harley Davidson). Вы говорите: грузовой контейнер с апельсинами, а не оранжевый грузовой контейнер. Вы говорите: грузовой контейнер с автомобильными запчастями, а не грузовой контейнер с автомобильными запчастями. Если вы создали настраиваемую структуру данных, предназначенную для хранения только определенного типа данных, например, названий яблок, и назвали ее «кунгабого», то у вас могло бы быть яблочное кунгабоко. Я знаю, о чем вы думаете, но сначала подумайте о мешочке с шарами и поймите разницу в значениях.

Christopher Mahan 08.10.2010 08:20

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

Ian Mackinnon 09.10.2010 00:20

@ Ян: Хорошо, я согласен с тобой. Таблицы в том виде, в котором они реализованы, не могут содержать ничего, кроме того, что они предназначены для хранения. За исключением, конечно, того, что они могут содержать много разных вещей. Красные рубашки, синие рубашки, мягкие рубашки, короткие рубашки и т. д. Рубашки с пайетками. Все они падают на стол рубашек. Рубашки в продаже, рубашки на заказ, рубашки с дефектом, рубашки в стадии разработки, рубашки в обертках, рубашки носятся, рубашки уничтожены, рубашки в африке, рубашки в пакистане, рубашки на корабле, рубашки в коробках, рубашки на полке, рубашки на полу. Все рубашки. В рубашечном столе. Имеет смысл. Нет.

Christopher Mahan 09.10.2010 00:33

Это забавные примеры - я склонен согласиться с @Ian, хотя @Christopher - я знаю, что дальше по дороге есть тележка с яблоками. Здесь продаются яблоки Granny Smith, Jonathon и даже Golden Delicious. И в конце концов, это таблица User, а не таблица Users ...

Pete - MSFT 31.05.2011 09:14

-1 за отсутствие ссылки на какой-либо стандарт (или авторитетного автора).

Bruce Alderson 24.09.2011 00:33

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

Tom Haws 05.12.2011 04:00

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

user74754 25.11.2013 07:55

Дело в том, что таблица - это набор объектов. Итак, для меня очевидно, что имя таблицы должно быть во множественном числе. То есть таблица Users - это набор объектов / сущностей под названием User.

Stack0verflow 07.05.2015 21:49

«Пользователь добавлен в таблицу Users». В Java это все равно что сказать, что переменная user принадлежит классу Users. Или сказать, что «ints i» лучше, чем «int i», потому что i - это просто еще одна переменная типа int (или, в Javascript, «vars i» лучше, чем «var i», потому что i это просто еще одна переменная). При таком подходе базу данных следует называть таблицами.

Plap 18.09.2015 16:57

Я не считаю справедливым сравнивать таблицы с классами Java. Класс работает принципиально иначе, чем таблица БД (набор определенных элементов). Думаю, лучше сравнивать таблицы с массивами.

Sebastianb 02.01.2017 18:00

@Plap Users - это не класс, это коллекция этого класса или список. Вы добавляете пользователя в список пользователей.

JSON 05.02.2019 20:54

Множественное число - лучший способ. Единственный аргумент против этого не выдерживает критики - это выбор отношений. ВЫБЕРИТЕ * от пользователей, у которых Users.Name = "somename". Это действительно должно быть записано как SELECT * from Users user where user.Name = "somename". Или подумайте об этом в рамках сущности. Users.Where (user => user.Name == "somename"). Таблица - это совокупность сущностей, а таблица - НЕ ОТНОШЕНИЕ. Отношение - это характеристика сущности, не более того. Имена таблиц должны быть во множественном числе

JSON 05.02.2019 21:00

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

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

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

Мне нравится ваша идея с «префиксом», но я бы назвал ее SystemUser.

ProfK 05.12.2008 17:50

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

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

Это соглашение было частью теории отношений задолго до того, как существовала ORM.

ProfK 05.12.2008 17:51

ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость.

barrypicker 15.09.2011 04:07

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

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

  • tblUser
  • tblThis
  • tbl Это
  • tblTheOther

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

Согласовано. Пробелы и префиксы от Дьявола.

Dave Markle 03.12.2008 21:24

MS Access поощряет имена таблиц с пробелами. Я подозреваю, что многие таблицы MSSQL в пробелах были импортированы оттуда.

James Curran 03.12.2008 21:26

+1 снова. Таблицы и поля, обозначенные пробелами, - это отличительная черта одаренного ребенка Office Junior, создающего для Берил настоящее приложение для доступа к кулу в учетной записи :-).

Cruachan 03.12.2008 23:30

Эй, мне нравится Берил в учетных записях ... но это никогда не заставит меня ставить префиксы или пробелы в имена моих таблиц ... и при этом я не буду ставить вопросительные или восклицательные знаки в имена моих полей. Мне плевать, какая она милашка. :П

BenAlabaster 03.12.2008 23:53

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

ProfK 05.12.2008 17:52

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

ProfK 05.12.2008 17:52

Однажды я часами пытался выбрать из таблицы с префиксом единое ведущее пространство. Я думал, что сошёл с ума.

scipilot 29.12.2013 14:01

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

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

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

my2cents ---

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

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

Sql Server требует фигурных скобок только для имен, которые являются зарезервированными ключевыми словами («Пользователь» - один). Я считаю, что у Oracle такая же политика

Jimmy 03.12.2008 23:18

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

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

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

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

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

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

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

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

Will Dieterich 08.12.2008 10:59

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

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

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

Похоже на ритуальное самобичевание. Были ли такие захваты имен еще?

Kjetil S. 21.02.2019 01:02

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

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

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

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

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

mpen 04.04.2009 06:29

plu_ral / PluRal для имен таблиц, singular_id / singularId для первичных ключей.

hochl 05.10.2011 15:26
Ответ принят как подходящий

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

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

MikeW 13.03.2009 02:11

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

OZ_ 27.09.2011 14:19

Именно поэтому я сказал: «Возможно ли ...?» и, возможно"

Tom H 27.09.2011 17:53

Разве привязка имени схемы не устранит всю путаницу? AppName1.Users, AppName2.Users?

Zo Has 25.10.2011 13:49

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

Tom H 25.10.2011 17:57

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

user166390 10.02.2012 20:21

Какое отношение имеет префикс имени таблицы к использование единственного и множественного числа? Теперь вопрос только в том, использую ли я Widget_User или Widget_Users. Это не имеет отношения к вопросу.

Wesley Smith 01.12.2016 02:14

Этот принятый ответ является скорее побочным комментарием и не отвечает на вопрос.

Viliami 01.01.2017 15:19

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

tsuz 13.02.2018 13:25

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

gregmac 08.06.2020 21:39

При запросе `from Country, Cities where Country.id`, здесь страны, имеющие единый идентификатор, звучит не очень хорошо.

Ravi Parekh 16.10.2020 19:27

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

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

stephbu 03.12.2008 22:41

За счет удобочитаемости, что довольно проблематично в операторах sql.

dkretz 03.12.2008 23:20

Полностью согласен - CAPS для ключевых слов, Camelcase и т. д. Для имен помогает немного улучшить это, но все же снижает удобочитаемость.

stephbu 04.12.2008 18:24

Сотрудники не всегда могут быть пользователями.

ProfK 05.12.2008 17:55

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

dkretz 05.12.2008 20:28

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

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

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

Это неправда. Zend_Db не налагает соглашения об именах для имен таблиц базы данных, имен классов таблиц или имен классов строк. Я сам удалил этот непродуманный код перегиба.

Bill Karwin 03.12.2008 23:32

Но я поддерживаю соглашение о множественном числе имен классов таблиц и единственном числе имен классов строк. Просто фреймворк Zend_Db не требует соблюдения каких-либо соглашений.

Bill Karwin 03.12.2008 23:33

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

markus 13.03.2009 02:05

Для стола нет класса. Любой класс, сопоставленный с таблицей, на самом деле описывает строку, а не таблицу. Единственное соответствие классу таблицы - это то, что явно описывает коллекцию.

Bruce Patin 30.11.2012 20:42

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

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

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

Microsoft - это то, чем они являются, в первую очередь по бизнес-причинам (и зачастую по неэтичным причинам), а в последнюю очередь по логическим причинам. Единственная причина, по которой я следую за ними, - это то, что они большие гориллы, и все остальные идут этим путем. Когда у меня есть выбор, я выбираю другой путь.

Bruce Patin 30.11.2012 20:38

Следует отметить, что information_schema является частью ISO / IEC 9075-11, стандарта SQL. И да, он использует множественные имена таблиц / представлений.

Paulo Freitas 29.05.2018 03:53

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

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

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

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

Jason 13.03.2012 00:39

Как поступить с таким именем таблицы, как companies, если в других таблицах есть поле ссылки под названием company_id? Хотя он правильно написан, он кажется непоследовательным для тех, кто разборчив в соглашениях об именах таблиц.

Jake Wilson 15.02.2016 19:46

Помня, что единственное число companies - это company, и что этот идентификатор является ссылкой на единичный элемент. Код не должен беспокоить нас больше, чем английский язык.

David 04.01.2018 22:47

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

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

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

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

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

joshperry 21.08.2010 04:51

ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость.

barrypicker 15.09.2011 03:53

Это преобладает в инструментах или только в тех инструментах, которые вы использовали?

Bruce Alderson 24.09.2011 00:38

В моем мире я стараюсь использовать согласованные имена во всем проекте, чтобы не тратить время на размышления, есть ли у этого экземпляра в конце или нет. Тот факт, что ORM может переименовывается и является независимым, не означает, что это помогает вашим коллегам-разработчикам.

John Nicholas 01.05.2012 19:38

Некоторые ORM (как и многие инструменты программирования) имеют поведение по умолчанию, которое генерирует реализации без конфигурации ... с точки зрения ПРОИЗВОДИТЕЛЬНОСТИ. Таким образом, создание класса Employee без явного сопоставления приведет к созданию таблицы Employee по умолчанию.

user919426 15.02.2015 01:44

@barrypicker. Множественные имена не просто выглядят глупо в коде ORM. Множественные числа тоже плохо смотрятся в SQL, особенно когда речь идет об уникальном атрибуте. Кто никогда не писал select user.id из пользователей? Или, может быть ... из пользователей, вышедших присоединиться к thingy.user_id = user.id ...?

Samuel Danielson 24.02.2017 08:34

@SamuelDanielson - Я не понимаю твоей точки зрения. Используя пример SQL, который вы предоставили, я бы в любом случае использовал псевдоним таблицы, например «select u.Id from users u». Стол представляет собой набор предметов, поэтому он должен быть во множественном числе - как в корзине с яблоками, а не в корзине с яблоками.

barrypicker 25.02.2017 00:49

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

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

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

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

как насчет слова, оканчивающегося на "s"? Если у вас есть таблица с названием «Новости» (просто в качестве примера), как бы вы назвали сборник новостей? Новости? Или вы бы назвали этот стол «Новым»?

Anthony 28.08.2009 15:35

Я бы назвал таблицу NewsItem и коллекцию NewsItems.

Ash Machine 29.08.2009 00:46

Что делать, если вам нужно проверить орфографию весь код, иначе он не будет компилироваться;)?

Hamish Grubijan 08.06.2010 19:33

@Hamish: вы на самом деле проверяете орфографию с помощью общих записей, таких как orderby, sbyte, const, sizeof? Напомнить мне еще раз?

Ash Machine 25.03.2011 23:25

ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость.

barrypicker 15.09.2011 03:55
fishs не очень хорошо работает с этим правилом. Множественное число имен коллекций в ORM не так сложно, потому что вы можете посмотреть на тип объекта, который нужно сопоставить с единственным именем таблицы. Затем свойство можно назвать как угодно, а все остальное вы можете позволить автозаполнению ide.
Merlyn Morgan-Graham 28.10.2011 12:46

@HamishGrubijan, тогда перестань использовать Word для написания кода! ;)

Valentino Vranken 08.02.2012 16:22

В дополнение к тому, что вы сказали, есть еще один пример: категория и категории. В Laravel Eloquent ORM используется строчная форма множественного числа в названии модели. Интересно, почему они не рассматривали единственное число как вариант по умолчанию.

Karma 16.09.2014 01:45

Вы противоречили себе. Вы сказали, что «каждая коллекция вещей уникальна с добавлением s», но вы утверждаете, что имена таблиц должны быть в единственном числе. По вашему собственному признанию, имена таблиц должны быть множественного числа (или, как вы указали, псевдо-множественного числа), потому что таблица - это совокупность данных в единственном числе. (т.е. таблица, содержащая автомобили, представляет собой набор объектов автомобилей, поэтому ее следует называть "cars"). Если вам нравится синтаксис car.doors в единственном числе, используйте псевдоним. (т.е. выберите car.WheelCount из Cars as car, где car.Id = 44)

Mark A. Donohoe 09.07.2015 07:15

@MarqueIV: когда я сказал «совокупность вещей» во множественном числе, я имел в виду коллекцию в предметной области, а не в области данных. Например, список, массив, IEnumerable будут коллекциями (множественное число). Таблица данных будет единственной. Надеюсь, это будет полезно.

Ash Machine 13.07.2015 18:50

Все сводится к тому, называете ли вы таблицу как отдельный объект (например, CarTable) или как объекты, которые она содержит (Cars). Логическая ошибка, которую я имею с людьми, которые назвали бы стол «Машиной», заключается в том, что стол - это не машина! Это CarTable, который представляет собой тип объекта, эквивалентный типу данных. CarCollection (также в единственном числе). Как только вы даете этому «типу данных» имя (т.е. имя переменной), вы обычно описываете, как он используется, в данном случае контейнер / коллекция / что-то еще из объектов Car, поэтому DataType должен должно быть CarTable, но имя таблицы должно быть Cars.

Mark A. Donohoe 13.07.2015 23:23

@MarqueIV: Хорошо, пусть будет по-вашему, как указывает SOF, ответы в основном основаны на мнении. Так что я рад, что у тебя есть твое.

Ash Machine 13.07.2015 23:34

Аааа ... старая позиция "соглашусь, чтобы не соглашаться"! lol Достаточно честно. Я признаю это.

Mark A. Donohoe 14.07.2015 02:50

В этом ответе есть очень хороший момент. Сопоставление класса Mouse с таблицей Mice кажется таким странным.

Thupten 15.07.2015 15:59

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

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

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

hochl 05.10.2011 15:18

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

William T. Mallard 09.05.2014 05:02

Таблица - это не набор записей; таблица - это определение того, как выглядит запись. Это несоответствие, которое, кажется, есть у всего народа множественного / единственного числа.

rich remer 21.09.2016 23:05

Я не согласен с комментарием к оператору SQL. Что делать, если вы хотите присоединиться против Users.Id

hashtable 30.11.2018 19:31

У одной old_lady много кошек ИЛИ old_lady есть кошек. Я думаю, что ERD лучше читать во множественном числе. И таблица сущностей, таблицы имеют много сущностей, поэтому я снова думаю, что множественное число звучит хорошо.

user3121518 08.07.2019 05:05

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

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

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

Bill Karwin 03.01.2009 22:43

Привет, мне нравится имя User_Table! :)

Camilo Martin 09.05.2010 04:25

ORM не должен диктовать имена объектов, которым они сопоставляются. Смысл ORM - это абстракция объекта, предоставляющая эту гибкость.

barrypicker 15.09.2011 03:56

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

Jason 13.03.2012 00:19

@Jason: Пожалуйста, сравните и сопоставьте то, как читаются эти вещи: 1) $db->user->row(27), $db->product->rows->where(something) 2) $db->users->row(27), $db->products->rows->where(something).

chaos 13.03.2012 00:35

В SQLAlchemy примерами могут быть User.query.get(27) или User.query.filter(User.id == 27).one() и Product.query.filter(something).all(), независимо от того, как называются таблицы. Как сказал @barrypicker, ORM, который вы используете, недостаточно гибкий.

sayap 24.11.2012 07:02

@barrypicker Грамматика не должна диктовать соглашения о программировании (знаете ли вы, что java beans - это идиотизм?). Его следует соблюдать, пока он не мешает. Возможность использовать другое отображение в ORM есть в тех случаях, когда это необходимо. Грамматика очень необычна, и такие вещи, как «матрицы» против «матриц», - редкие, но убедительные примеры того, почему код не должен быть заражен ею.

maaartinus 05.05.2018 06:21

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

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

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

Хороший пример ловушки при добавлении к именам объектов префикса квалификатора type!

Kenny Evitt 08.11.2010 19:14

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

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

-- 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'

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

Я не согласен; В базе данных Oracle есть системная таблица с именем USER, теперь вы должны решить назвать ее «APP_USER» или что-то в этом роде. Но учитывая, что в любом случае лучше сказать «ВЫБРАТЬ ВСЕ ИЗ ПОЛЬЗОВАТЕЛЕЙ», я бы просто назвал все таблицы множественным числом моих сущностей, чтобы не конфликтовать с какой-либо системной таблицей.

cosbor11 20.06.2015 02:23

Мне нравится выбирать из users или userTable, но не из user. С Singular это звучит так, как будто вы получаете только одну пластинку. Я вижу, что вам нравится думать, что нужно выбирать столбцы из таблицы. Больше всего нравится думать, что select возвращает строки из таблицы, поэтому имя коллекции звучит логично.

Thupten 15.07.2015 15:52

Я дам вам свои 2 цента. Будет ли ваша таблица базы данных состоять из одной строки или нескольких строк? Это как сказать: у меня в обеих руках по пять яблок. Тем не менее, мы оба согласны, что правильная фраза будет такой: у меня пять яблок в обеих руках. Почему мы хотим изменить этот вопрос для базы данных? Как только вы назначите userTable в качестве имени, у нас будет 1 таблица, которая фактически уже определяет существование нескольких строк данных. Однако я бы тоже этого не сделал. Я предпочитаю использовать множественное число. Поскольку age = '21', скорее всего, вернет более 1 строки, не так ли?

Mike M. 12.12.2015 01:41

Единственное число - это стандарт.

danger89 26.01.2016 15:09

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

Kelsey Hannan 26.01.2018 13:28

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

kevlarr 04.04.2018 04:22

+ Келси Ханнан Точка зрения ярмарки, хотя некоторым людям нравится соглашение о единственном числе, но некоторые фреймворки (например, Rails) используют множественное число в качестве своего соглашения ... поэтому иногда выбор единственного и множественного числа зависит от проекта ....

twknab 25.09.2018 12:19

«Выбрать все поля из таблицы« пользователь », которым 21 год» -> Выбрать каждое поле для каждого пользователя (нескольких), которому 21 год. Так что логичнее использовать множественное число.

Simon Fakir 15.11.2018 00:59

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

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

против.

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

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

Голосую за единственное число.

В этом примере да, но в практическом sql это никогда не будет написано таким образом. У вас был бы псевдоним таблицы, чтобы он был больше похож на SELECT C.Name, C.Address FROM Customers WHERE Customers.Name > 'def'

Michael Haren 22.08.2009 02:37

+1, (год спустя) Вы привели УЖАСНЫЙ пример того, что единственное число имеет смысл. Это в некотором роде религиозный спор. Несколько лет назад я был переведен на сингулярность архитектором данных, на много лет старше меня, и мне это показалось правильным (после того, как мне потребовалось убедить меня переключиться).

Chris Adragna 04.10.2010 17:52

Я думаю, что sql лучше звучит во множественном числе. У вас не было бы имен таблиц для каждого столбца, почему вы так любите печатать? ВЫБЕРИТЕ Имя, Адрес ОТ Клиентов ГДЕ Имя> "def" Вы выбираете из пула клиентов, где имя больше, чем def.

jamiegs 06.04.2011 05:06

Как насчет использования псевдонима / AS, чтобы обойти эту проблему? ВЫБЕРИТЕ Customer.Name, Customer.Address FROM Customers AS Customer ГДЕ Customer.Name> "def"

James Hughes 15.06.2011 20:45

Второй звучит намного лучше, необычно звучит как человек, не говорящий по-английски.

HLGEM 30.08.2013 19:00

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

Marco 30.09.2019 23:26

IMHO, имена таблиц должны быть множественное число, как Клиенты.

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

Пожалуйста, объясните свое мнение.

snwfdhmp 13.07.2020 11:02

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

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

Нет, на самом деле это будет называться «UserProperties», поскольку они являются свойствами пользователя объекты (строки), которые хранятся в таблице, а не свойствами самого пользователя стол. Выражение «UsersProperties» будет означать, что они являются свойствами таблицы пользователей (например, RowCount, MaxRows и т. д.), Тогда как UserProperties четко обозначает те, которые относятся к пользователю (например, UserName, Age, SSN и т. д.)

Mark A. Donohoe 09.07.2015 07:51

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

Multiple users are listed in the users table.

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

A singular user can be selected from the users table.

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

http://myapp.com/users would list multiple users.

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

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

ProfK 26.11.2009 11:54

Думаю, я склонен с этим согласиться. Меня только смущает, почему модели должны быть единичными? Только если модель касается только одного пользователя. Если бы я запрашивал базу данных, чтобы получить всех пользователей, тогда мне нужно было бы получить доступ к модели? Для одного экземпляра не имеет смысла извлекать все записи, например: $ user-> get_all () // не имеет смысла

user11995521 05.04.2020 03:11

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

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

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

Marco 30.09.2019 23:39

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

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

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

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

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

Разве это не конвенция и в RoR? Множественные имена для таблиц и Singular для классов ORM? Для меня это имеет большой смысл. Таблица называется «cars», потому что у нее много экземпляров «car», а класс называется «Car», потому что он будет содержать один экземпляр автомобиля !!

Sap 14.07.2011 08:38

@Sap Небольшое исправление последней части вашего предложения - класс "Car" - это абстрактный тип данных, представляющий реальный автомобиль. Будет ли он содержать один экземпляр или несколько, зависит от того, как он используется.

asgs 10.10.2016 09:15

Давайте посмотрим правде в глаза, таблица car - это определение структуры отдельного автомобиля. Если вы посмотрите на структуру таблицы, она будет выдавать в основном «id int, цветовую строку и т. д.», Кроме того: скажем, у вас есть таблица car_vendor (или для вашей версии множественного числа это будет cars_vendor) с внешним ключом cars_id ?! что это за дерьмо? это car_id не надо заставлять меня думать. Я сильно предпочитаю Singular

Toskan 04.01.2017 18:51

Мне очень нравится этот ответ! Позволь мне объяснить. Если коллекция - car, и вы хотите получить все от car, то есть blue, результат должен быть чем-то вроде tire, mirror, engine. И это сбивает с толку, потому что все результаты - parts от car. Таким образом, имя таблицы должно быть carparts (или car_parts, CarParts, как хотите)

arnoudhgz 06.01.2017 16:18

Любой разработчик баз данных, применяющий единичные имена таблиц, по сути объявляет войну любым разработчикам приложений Ruby on Rails, которые могут войти в контакт с этой базой данных в будущем. Строгая настойчивость Rail в использовании единственных слов для классов и множественных имен для таблиц позволяет реализовать множество мощных функций во многих жемчужинах экосистемы Ruby. Поэтому, даже если вы думаете, что единственное число звучит лучше, ради совместимости вам следует придерживаться множественного числа. Я полагаю, что это справедливо и для многих других объектно-реляционных картографов.

Kelsey Hannan 26.01.2018 13:39

Настоящие проблемы начинаются, когда вам нужно присоединиться к 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, последний запрос более информативен, когда вам нужно упомянуть поле.

BIOHAZARD 24.10.2019 16:02

На практике 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

krozaine 06.05.2020 22:32

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

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

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

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

Наверное, это самый логичный аргумент на эту тему, который я когда-либо видел, и мне приятно, что я потратил то время на латынь. +1 точно.

user788472 23.04.2013 00:57

Что ж, мне явно нужно пополнить свой словарный запас.

TJ Biddle 21.05.2013 08:54

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

OCDev 27.10.2013 03:54

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

Caltor 04.08.2015 02:18

Убежден - это не отражается. Интересно видеть, что по прошествии всего этого времени популярный выбор «единственного» и «множественного числа» является ошибочным и то и другое!

Stuart 21.08.2015 18:51

Поздно к вечеринке, но мне интересно, примените ли вы то же правило к именам переменных в (другом) программировании, когда они содержат несколько элементов одного типа (например, массивы, списки, наборы и т. д.). FrequentCustomerArray, а не FrequentCustomers? Если нет, то чем это отличается?

Thijs van Dien 10.10.2016 15:36

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

Arno 02.07.2018 22:38

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

MarredCheese 23.04.2020 22:27

«ВЫБРАТЬ ИМЯ ИЗ ПОЛЬЗОВАТЕЛЕЙ» - это предложная фраза - вы извлекаете материал из таблицы пользователей. На самом деле вам нужен случай аблатив. Итак, в английском языке нет разного написания для разных падежей, но аргументы в пользу множественного числа одинаковы - вам нужно имя, которое будет вписываться в предложения, в которых оно используется. Вы говорите: «Выберите эти вещи из списка пользователей», а не «Выберите эти вещи из списка пользователей».

beleester 28.05.2020 17:54

Единственное число не является «не изменяемым», оно просто использует наклонение count по умолчанию для английского языка, что означает единственное, а не множественное число.

Jason Goemaat 25.03.2021 19:57

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

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

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

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

Отношение AppUserGroup говорит мне, какие объекты являются AppUserGroups

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

Отношение AppUserGroup_AppUserGroup говорит мне, как связаны между собой AppUserGroups и AppUserGroups (т.е. группы, входящие в группы).

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

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

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

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

Alexandre Martini 03.12.2014 19:55

Не могу больше не согласиться. «Выберите * из пользователей, имя которых похоже на« J% »», потому что я выбираю всех пользователей, имя которых начинается с «J». Если ваш аргумент состоит в том, что вы хотите написать «... где User.Name like ...», просто используйте псевдоним. По той же причине я говорю: «Дайте мне пару носков из всех доступных».

Mark A. Donohoe 09.07.2015 07:38

Если бы я был именно таким, имя моей таблицы было бы sock_pair

Manuel Hernandez 03.05.2017 17:49

@AlexandreMartini Совершенно верно. Как некоторые люди, которые называют единственная запись в таблице «отношением».

Nuno André 20.03.2020 21:07

У меня был такой же вопрос, и после прочтения всех ответов здесь я определенно остаюсь с 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

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

Причина 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, ...

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

Готов поспорить, если вы повесите этикетку на ящик для носков, вы назовете его «Носки».

Chris Ward 06.02.2012 12:02

Определенно. Трудно получить один стандарт, который работал бы для всех и для всех, важно, чтобы он работал для вас. Это работает для меня, и здесь я объяснил, почему, но опять же, это для меня, и я нахожу это очень удобным.

Nestor 14.02.2012 16:10

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

will824 10.04.2012 23:53

Причина 6, хорошо, пока вы не попытаетесь вернуть более одного пользователя: P SELECT Customers.CustomerRole FROM Customers WHERE Customers.CustomerRole = 'admin'

steve 21.06.2012 01:58

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

Kyle Clegg 25.07.2012 21:29

@Kyle из-за аналогии Нестора с сумкой / контейнером для яблок (Причина 1). Когда вы обозначаете коробку для перевозки, вы пишете «Книги», а не «Книга».

S22h 04.10.2012 17:11

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

Jason 09.10.2012 01:58

Причина 4 милая, но она бесполезна, если вам придется использовать форму множественного числа в другом месте кода. Допустим, есть модельная функция для получения списка неактивных пользователей, естественно назвать ее getInactiveUsers. Итак, простота становится: (1) особенность SQL для всего. (2) особый класс в коде. (3) для остальных, единственное или множественное число, в зависимости от того, является ли это коллекцией или единичным экземпляром. Моя простота всего лишь (3).

sayap 24.11.2012 06:49

+1 Только по причине 5 (глобализация). Я сталкивался с этой проблемой раньше, и, безусловно, это помогает иностранным программистам использовать единое соглашение об именах для объектов и таблиц.

MV. 25.12.2012 01:30

У меня дома есть ящик для носков, а не ящик для носков. Если бы это была база данных, я бы назвал ее таблицей «Sock».

jlembke 12.04.2013 01:43

@Chris Сущность не является «этикеткой» или «коллекцией». Он «должен» определять «экземпляр» ...

Eddie B 30.04.2013 07:09

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

Nestor 03.05.2013 15:29

@Nestor, после прочтения вашего комментария причина 4 теперь имеет смысл. Я действительно продан :)

sayap 04.05.2013 06:21

Настолько плохо, что я не могу проголосовать за этот ответ дважды. Один по причине 1, а другой по причине 4.

Oybek 31.08.2013 10:21

Причины 2-6 довольно спорны, если вы согласитесь, что идея многословных языков и ООП предназначена для гуманизации программирования, чтобы концепции были немедленно поняты.

Tim 18.09.2013 04:44

Что касается Причины 1, вы можете оправдать единственное имя, используя имя коллекции с суффиксом, когда речь идет об одном объекте: «Это мой SockDrawer». Однако, когда вы говорите обо всех своих ящиках, вы должны сказать: «Это мои носки, это мои штаны» и т. д. Это потому, что контекст разговора о типе коллекции уже установлен. «Для чего эта таблица? Мои пользователи. Что это за таблица? Моя таблица пользователей. Как вы ее обозначите? Пользователи».

Tim 18.09.2013 04:55

@jlembke: Это ящик с носками. Вы не стали бы называть ящик для носков «носком». Какая аналогия более точна?

Ry- 10.10.2013 00:22

@minitech: Это хорошие моменты. Для меня это именно то, что сказали Нестор и Джейсон, я просто думаю, что это работает лучше. Но продолжаем бесполезные споры :) - «Носки», «Штаны» и «Перчатки» все равно обычно употребляются во множественном числе. Может, «Рубашки» лучше. Я слышу «Положите эти рубашки (в частности) в ящик для рубашек (абстрактных)» у себя дома каждый день, а на работе я слышу «Сохраните этих клиентов в таблице клиентов». Но, в конце концов, это не имеет значения. Singular работает лучше для меня по причинам, указанным в этом ответе. И если я увижу базу данных с множественным числом, ничего страшного, но я знаю, что это вызовет некоторые неудобства.

jlembke 11.10.2013 01:57

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

Nestor 26.10.2013 09:18

У вас есть записи пользователей, а не записи пользователей. Следовательно, у вас есть таблица пользователей, а не таблица пользователей.

OCDev 27.10.2013 03:24

@minitech: Да, вы бы не назвали свой ящик для носков "Sock". Но вы МОЖЕТЕ назвать это «Ящик для носков». Таким же образом вы можете назвать пользовательскую таблицу «User_Table». Имена МОГУТ быть в единственном числе, если после них стоит слово «Таблица». Итак, вот как я смотрю на это: представьте, что слово «Таблица» должно появиться в конце всех имен ваших таблиц, но по соглашению слово «Таблица» опускается, оставляя вам только слово в единственном числе. Просто как условность. Когда вы смотрите на имя таблицы, вы видите «Пользователь», но интерпретируете это «Пользовательская таблица». Это может сработать для людей с ОКР вроде меня.

OCDev 27.10.2013 03:42

@FriendlyDev: Я прочитал «Таблицу с пользователями». ERR_SUBJECTIVE

Ry- 27.10.2013 03:58

@minitech: Я согласен, то, как это можно прочитать, субъективно. Я говорю о другом: причины 1–6 в основном объективны и показывают, что использование единичных имен таблиц более эффективно для целей разработки. Тем не менее, отдельные имена для таблиц иногда выглядят и кажутся неудобными для некоторых людей (вот тут-то и возникает субъективный опыт). Это единственный недостаток, который я вижу в использовании имен в единственном числе. Точка зрения, которой я поделился, помогает мне преодолеть мысленные оговорки относительно использования единственных имен. Я уверен, что такая точка зрения поможет другим более комфортно использовать имена в единственном числе.

OCDev 27.10.2013 04:34

@FriendlyDev: Причина 3 - единственная объективная причина в списке. 2 и 5 - одна и та же причина. Причина 6 глупая. Но… ладно.

Ry- 27.10.2013 04:49

@minitech: Причина 1 сформулирована не очень хорошо, но объективна. Для обозначения коллекции или набора всегда используется слово в единственном числе. Это никогда не «набор носков» или «коллекция безделушек», но всегда «набор носков» или «коллекция безделушек». Я согласен с тем, что вы можете СМЕНИТЬСЯ на набор или коллекцию, сказав «набор носков» или «набор безделушек», но вы на самом деле не ссылаетесь на фактическое имя набора или самой коллекции, когда ссылаетесь на них таким образом. В «Коллекции пользователей» и «Коллекции пользователей» «Пользователь» - это имя коллекции, «пользователи» - это часть описания коллекции.

OCDev 27.10.2013 05:52

@FriendlyDev: Я совершенно не согласен. Меня зовут райан; Вы не называете меня «человеком Райана». «Таблица носков» не подразумевается. (Не согласен? Вот почему это субъективно.)

Ry- 27.10.2013 05:54

@minitech: 2 и 5 тесно связаны и могут быть объединены вместе, да, но это не значит, что они необъективны. Также можно доказать, что 4 способствует простоте, что делает 4 объективными. 6 слабоват, но тоже объективен. Все это объективно. И, наконец, вы Райан, но вы не являетесь и никогда не будете набором или коллекцией, поэтому пример с Райаном не является продолжением. Если и существовала группа людей по имени Райан, ее можно было бы назвать «Коллекцией Райана», а не «Коллекцией Райана». «Собрание Райанов» будет относиться к нему, но не к его названию.

OCDev 27.10.2013 06:09

Хотя мне нравится этот ответ, мое внимание привлекает URL-адрес stackoverflow.com/questions/.... Я бы поместил «вопросы» в таблицу «вопросы», и URL-адрес без путаницы отражал бы имя таблицы.

rybo111 14.11.2013 16:51

Я бы оставил параметры / данные вне ваших соглашений об именах таблиц. Не создавайте новый стол для каждого типа выдвижных ящиков. Добавьте столбец для обозначения типа элемента, хранящегося в нашем ящике.

Travis 19.11.2013 10:20

Что касается вашего примера applebag, я согласен. Но если я создаю таблицу с разными видами яблок, да, я могу создать таблицу с именем Apple [идентификатор, цвет, размер, страна происхождения и т. д...), но если я создаю таблицу, в которой я сохраню все выращенные фрукты в моей стране я могу назвать это фруктами [id, name]?

shabby 10.12.2013 00:23

@shabby Если несколько яблок попадают в таблицу Apple, тогда несколько фруктов попадают в таблицу Fruit. Вы также можете назвать их обоих множественным числом. Единственное, что гарантированно будет недопустимым, - это называть одно единственное число, а другое - множественное.

Rainbolt 12.02.2014 20:03

Прочитав все комментарии, я чувствую, что должен сказать .... SOCK .... +10 к OP за очень хороший ответ!

melodiouscode 23.04.2014 15:14

Причина 7. В случае, если таблица отображает объект, имя таблицы и имя класса будут совпадать, что позволяет избежать дополнительных потерь импеданса при несовпадении имен.

Sebastian Sastre 06.07.2014 07:47

Обычно из ящика вынимают пару носков, а не только один. Вешалка для галстуков, натяжка рубашки, шкаф для обуви, кажется, подтверждают ТОЧНУЮ причину.

bvj 14.07.2014 04:24

Стол новостей так же важен, как стол любви или стол погоды. Все они en.wikipedia.org/wiki/Mass_noun Нет таких вещей, как новости, любовь или погода. Сколько погоды вы хотели бы сегодня?

Tom Haws 06.09.2014 15:15

Недавно я нашел еще одну вескую причину, чтобы придерживаться единственного числа. У меня была таблица, содержащая кучу настроек, где каждый набор представлял собой набор настроек для организации, и я подумал, следует ли мне использовать единственное или множественное число. И тут меня осенило, потому что, очевидно, мне пришлось назвать таблицу «OrganizationSettings». Если бы я использовал множественное число, я бы не смог провести это различие. В этом случае множественное число относится к набору настроек для каждой организации. И вы все равно можете создать таблицу, содержащую разные настройки в каждой строке. Я надеюсь, что смогу донести свою точку зрения.

Semmel 04.10.2014 17:44

Хотя я согласен с выводом, что единственное число лучше, пример по первой причине кажется нелогичным. Вы говорите, что мешок с яблоками должен называться AppleBag; по этой причине таблица должна называться UserTable (как вы описываете контейнер - мешок с яблоками или таблицу пользователей). Или, наоборот, если вы считаете, что таблица пользователей должна называться «Пользователь», тогда вы должны называть свою сумку с яблоками Apple.

Rob Grant 27.11.2014 14:43

Я должен вызвать тебе по твоему комментарию "AppleBag" с первого пункта. Почему? Потому что, добавляя суффикс «Сумка», вы изменяете его находятся для ссылки на контейнер для чего-то. По той же причине у меня нет проблем, если вы сказали AppleTable, что приравнивается к AppleCollection. Но без описательной части - «таблица» или «коллекция» здесь - вы называете что-то тем, что оно может содержать или не содержать, а не тем, чем оно является сам. Другими словами, вы может говорите «AppleBag содержит яблоки», но вы можете нет сказать «Яблоко содержит яблоки», но вы можете сказать «Элемент с именем« Яблоки »содержит ноль или более объектов яблок».

Mark A. Donohoe 09.07.2015 07:25

@jlembke, ты прав. Вы бы назвали это «ящиком для носков», но, по вашему собственному признанию, вы не делаете этого в SQL, потому что если бы это было так, вы бы назвали его «SockTable», чего не делаете. Вы называете это «носком». Как я сказал выше, «ящик для носков содержит предметы для носков». Вы бы не сказали: «Ящик для носков содержит объекты-носки» или «Носок содержит объекты-носки». Вы путаете имя с описанием. На вашем «Ящике для носков» (описание) есть ярлык (название) «Носки», а не «Носки».

Mark A. Donohoe 09.07.2015 07:33

Если таблица не предназначена для чтения человеком, назовите ее asdjfhasgkdjagksjdg.

Quarktum 17.09.2015 18:49

А как насчет наименования самой базы данных? Например, я хочу иметь БД песочницы, которую будут использовать модульные тесты, и я пытаюсь выбрать между UNIT_TEST и UNIT_TESTS.

Leonid 25.09.2015 18:05

Основная причина использования единого соглашения об именах: таблицы - это прямое выражение сущности в базе данных на языке ER-модели / реляционной алгебре. Таблица «яблоко» представляет объектное яблоко и содержит «экземпляры» яблока. В ООП имя класса имеет единственное число: «Apple». У вас будет много «яблок» - экземпляров (объектов) типа «Яблоко».

tobia.zanarella 13.01.2016 23:31

О носках и носках: если бы у меня был такой ящик, я бы, вероятно, назвал его socksDrawer, потому что он такой. Это не «носок» или «носки», это «ящик». Я бы назвал контейнер, а не только то, для чего он используется. Почему бы не назвать таблицу так, как она есть: Таблица пользователей или Таблица пользователей? Это делает обсуждение единственного и множественного числа неуместным в этой области, если оно постоянно используется. Использование такого соглашения об именах таблиц в вашем коде делает его на 100% несомненным, несмотря на дополнительный постфикс.

html_programmer 31.03.2016 12:48

Причина 1. Представьте, что вы гуляете по городу с сумкой для яблок, и кто-то спрашивает, что у вас с собой. Вы бы ответили: «мой мешок с яблоками» или «яблоки». Но не сказал бы «яблоко», если вы не сумасшедший. Причина 2: слова множественного числа не так уж и сложны. По вашей логике, можно вообще отказаться от множественного числа. Я думаю, что человека это может сбить с толку. Причина 3. Порядок действителен, хотя я не часто упорядочиваю свои таблицы лексикографически. Причина 4: «Customer.CustomerID». Действительно? Причина 5: Перефразирование причины 2. Причина 6: Хорошо, я продана. Множественное число.

Lorenz Forvang 30.04.2016 08:42

Мне не нравится ваша аналогия с AppleBag. Это предполагает, что вам придется назвать таблицу для клиентов CustomerTable вместо Customer.

pacoverflow 21.10.2016 22:36

@Nestor Table с именем AppleBag сбивает с толку? это контейнер для яблок или для пакетов с яблоками. По вашему мнению, таблица с именем Customer является контейнером для клиента. AppleBag - это тип, который хранится внутри таблицы Bags.

Navrattan Yadav 02.12.2016 09:28

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

megamaiku 24.02.2017 22:00

@ tobia.zanarella, как я уже сказал выше в отношении другого плаката, ваш аргумент, приравнивающий имена классов, неверен, потому что класс представляет собой единственный экземпляр. Он не представляет собой набор вещей. И наоборот, таблица представляет собой набор вещей, представленных строками. Строка - это синоним класса, а не таблицы. Вы не скажете «Sock содержит коллекцию носков», но вы может скажете: «Socks (имя) или SockTable (описание) содержат в себе коллекцию объектов Sock».

Mark A. Donohoe 17.04.2017 21:40

@pacoverflow, ваш комментарий именно поэтому таблица должна быть множественного числа. Клиенты ясно показывают, что он содержит коллекцию объектов клиентов. Если это просто «Клиент», то откуда вы знаете, что он не содержит свойств для конкретного клиента? Единственное - неоднозначно. К тому же он не следует правильной грамматике. "Select * From Customers where Name = " Joe "" четко означает, что вы выбираете клиентов с таким именем. Но означает ли «Выбрать * от клиента, где Name = " Joe "» вы выбираете часть клиента, в которой эта часть называется Джо, или вы выбираете целого клиента с этим именем?

Mark A. Donohoe 17.04.2017 21:47

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

JCF 04.05.2017 18:01

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

Kevin R 10.05.2017 18:06

@ChrisWard, вы не называете ящик; в данном случае вы только называете носки. Я имею в виду, что этикетка - это не ящик для носков, а только «носки», которые находятся в ящике для носков.

Burak Kalafat 02.11.2017 15:41

Это очень похоже на мнение человека, большая часть работы которого заключается в работе с самой базой данных. Я работаю в позициях полного стека и предпочитаю собирательные имена или простые множественные числа, потому что это хорошо работает во всем приложении. У вас всегда есть список пользователей (таблица) и пользователь (строка) внутри. Выбор хороших имен на уровне SQL в значительной степени гарантирует, что даже у нескольких разработчиков эти имена будут применены ко всему приложению. Когда вы начинаете пытаться научить разработчиков как-то иначе думать о множественном числе на уровне SQL, все становится запутанным.

lolol 28.02.2018 22:59

Если вам нужно пометить свой ящик для носков, у вас проблемы посерьезнее, чем с именованием таблиц;)

niico 11.06.2018 11:51

Я думаю, это зависит от того, что вы делаете, использовать ли существительные во множественном или единственном числе для имен таблиц. Однако fruit уже во множественном числе - и можно сказать, что у вас есть пара socksнет и пара sock. Socks используется в единственном числе, а Sock Pairs - во множественном. Я считаю, что так оно и есть. ржу не могу. Мне нравится брать отрыв с обеих сторон, и я определенно вижу плюсы использования единственной формы. Отличный ответ!

Rik 12.12.2018 23:08

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

sempasha 27.08.2019 18:15

@Semmel, если вы связываете настройки с организациями, я уверен, что у вас просто таблица соединений

Alexander 24.10.2019 22:32

Причина 1 основана на ложных предпосылках «Вы можете думать о сумке, содержащей яблоки, например,« AppleBag », почему это должно быть так?» Имя таблицы должно описывать то, что она содержит, а не количество данных, которые она содержит «она содержит пользователей :) Но даже если он должен быть назван в соответствии с типом, который он содержит, почему это должно быть сделано? вы не указываете причины. Причина 2. (Удобство) Это будет так, только если вы останетесь в своей базе данных. При разработке приложения вам понадобится в любом случае начать иметь дело с именами в единственном и множественном числе. Неспособность сделать это сделает код трудным для чтения.

Patrick 13.12.2019 16:49

В любом случае, root-проблема заключается в том, что мы все еще пытаемся сократить естественный язык, и поэтому либо таблицы с префиксом col refs будут страдать (w / множественное число), либо table refs (w / singular), и я считаю, что большинство разработчиков не могут только работать либо с SQL, либо с кодом приложения. На естественном языке вы должны суффикс всегда к вашим ссылкам с именем контейнера (например, «таблица сотрудников / список / электронная таблица» (вместо просто «сотрудники»), но в SQL и коде приложения, даже если мы сделали прогресс при отбрасывании (что когда-то считалось нормальным) 1/2-буквенных имен идентификаторов мы все еще не развили полностью для включения имени контейнера в имена наших идентификаторов.

Tom 29.01.2020 23:10

... так что "выберите Customer.Name из Customer, где Customer.Id = 1" действительно должен быть (чтобы не сокращать естественный язык), "выберите CustomerTable.CurrentRow.Name из CustomerTable, где CustomerTable.CurrentRow.Id = 1"

Tom 29.01.2020 23:12

Мне очень нравится ваш ответ, единственная проблема в том, что происходит, когда вы хотите получить доступ ко всем записям, это выглядит немного странно, например: $ article-> get_all () не имеет смысла, $ article-> all () звучит более семантично, я представил бы, что единственное число будет представлять одну строку и ничего больше

user11995521 05.04.2020 02:47

Я пришел сказать что-то похожее на Тома, я иногда думаю о том, чтобы назвать свои таблицы таблицами. Пишу ли я Select * from PeopleTable или Select * from PersonTable - понятно, что я делаю. Некоторое время назад я перешел на код EF, и в VS он автоматически предлагает множественные имена для таблиц, потому что это имеет больше смысла в терминах объектов LINQ и oop. Я понял, что добавляю к объектам ViewModel суффиксы с виртуальной машиной, чтобы прояснить мой код. Тогда я подумал, может быть, модели должны иметь суффикс Model. Но тогда вам придется вызвать стол PersonModelTable - в общем, выберите то, что лучше всего подходит для вашей установки !?

jamheadart 30.09.2020 10:23

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

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

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

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

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

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

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

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

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

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

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

Красный ;-)

Насколько сложнее добавить «Table», чем «_tbl»?

ProfK 28.05.2012 12:07

Для большей ясности определение таблицы на самом деле является определением ОДНОЙ потенциальной строки.

Bruce Patin 30.11.2012 20:46

По вашему собственному определению вы дали двум разным объектам одно и то же имя ... объект, который будет помещен в таблицу, и таблицу, которая содержит эти объекты. Если я говорю «Автомобиль», я имею в виду таблицу или запись в этой таблице? Если я говорю «Машины», это ясно, что я имею в виду вещь, которая содержит ноль или более автомобильных объектов. Использование множественного числа правильно отличает предмет от того, что его держит. если бы вы сказали CarTable, это единственное число. Но без суффикса «таблица» вы должны дать ему имя, представляющее то, что в нем содержится. На «Sock Drawer» (единственном числе) есть этикетка (название) «Socks».

Mark A. Donohoe 09.07.2015 07:59

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

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

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

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

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

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

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

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

Microsoft - это то, чем они являются, в первую очередь по бизнес-причинам (и зачастую по неэтичным причинам), а в последнюю очередь по логическим причинам. Единственная причина, по которой я следую за ними, - это то, что они большие гориллы, и все остальные идут этим путем. Когда у меня есть выбор, я выбираю другой путь.

Bruce Patin 30.11.2012 20:36

Две вещи. Во-первых, вы обычно не используете имена таблиц и пишете 'select ID FROM OrderHeaders WHERE Reference =' ABC123 ', потому что вы «выбираете все идентификаторы из OrderHeaders, где что-то верно», но если бы вам пришлось использовать имена таблиц из-за присоединиться или что-то еще, вы должны использовать такой псевдоним ... 'выберите OrderHeader.ID FROM OrderHeaders как OrderHeader ГДЕ OrderHeader.Reference =' ABC123 '

Mark A. Donohoe 09.07.2015 07:48

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

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

Mark A. Donohoe 09.07.2015 07:46

Расширяя эту идею, каждый столбец в определении также должен быть множественным.

Bruce Patin 03.11.2017 23:10

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

Mark A. Donohoe 03.11.2017 23:37

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

Bruce Patin 07.11.2017 19:24

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

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

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

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

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

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

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

Нецелесообразно использовать такое соглашение в мире реляционных моделей, особенно когда вы описываете отношения между объектами, например «В каждой команде может быть только один главный тренер и несколько второстепенных тренеров», что описано: Команда-> Главный тренер, Команда - >> Вторичный тренер.

noonex 02.08.2015 16:04

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

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

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

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

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

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

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

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

I would prefer,
Users table => user
Roles table => role
users role relationship table => user_roles

На обоих сайтах разные бумаги, думаю, нужно только выбрать свою сторону. Лично я предпочитаю 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

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

Nuno André 20.03.2020 20:18

Другие вопросы по теме