Соглашения об именах баз данных, таблицах и столбцах?

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

  1. Должны ли имена таблиц быть множественными?
  2. Должны ли имена столбцов быть единственными?
  3. Должен ли я префикс таблиц или столбцов?
  4. Должен ли я использовать любой случай в именовании элементов?

Существуют ли какие-либо рекомендуемые рекомендации для присвоения имен в базе данных?

Я рекомендую проверить образцы баз данных Microsoft SQL Server: https://github.com/Microsoft/sql-server-samples/releases/tag/adventureworks

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

  1. Сингулярные имена для таблиц
  2. Сингулярные имена столбцов
  3. Имя схемы для префикса таблиц (например: SchemeName.TableName)
  4. Корпус Паскаля (также известный в верблюжьем корпусе)

Поздний ответ здесь, но вкратце:

  1. Мое предпочтение – множественное
  2. да
  3. Таблицы : * Обычно * префиксы не являются лучшими. Столбцы : Нет.
  4. Обе таблицы и столбцы: PascalCase.

Разработка:

(1) Что вы должны делать. Есть очень мало вещей, которые вы должны делать определенным образом, каждый раз, но есть несколько.

  • Назовите свои первичные ключи, используя формат «[singleOfTableName] ID». То есть, является ли ваше имя таблицы Клиентом или Клиентами , первичный ключ должен быть CustomerID .
  • Кроме того, foreign keys должны быть последовательно названы в разных таблицах. Должно быть законно избивать кого-то, кто этого не делает. Я бы сказал, что, хотя определенные ограничения внешнего ключа часто важны, постоянное именование внешнего ключа всегда важно
  • У вашей базы данных должны быть внутренние соглашения . Несмотря на то, что в последующих разделах вы увидите, что я очень гибкий, в базе данных имена должны быть очень последовательными. Независимо от того, называется ли ваша таблица для клиентов Клиентами или Клиентом , менее важно, чем вы делаете это одинаково во всей базе данных. И вы можете перевернуть монету, чтобы определить, как использовать символы подчеркивания, но тогда вы должны продолжать использовать их одинаково . Если вы этого не сделаете, вы плохой человек, у которого должна быть низкая самооценка.

(2) Что вы, вероятно, должны делать.

  • Поля, представляющие один и тот же тип данных в разных таблицах, должны быть одинаковыми. Не используйте Zip на одном столе, а ZipCode – на другом.
  • Чтобы разделить слова в именах таблиц или столбцов, используйте PascalCasing. Использование camelCasing не было бы внутренне проблематичным, но это не соглашение, и это выглядело бы забавно. Я обращу внимание на символы подчеркивания. (Вы не можете использовать ALLCAPS, как в прежние дни. OBNOXIOUSTABLE.ANNOYING_COLUMN был в порядке 20 лет назад, но не сейчас.)
  • Не искусственно сокращайте или сокращайте слова. Лучше для названия быть длинным и ясным, чем коротким и запутанным. Ультра-короткие имена – это перерыв от более темных, более диких времен. Cus_AddRef. Что это такое? Справочный адрес адресата? Дополнительный возврат клиента? Направление адресного адреса?

(3) Что вы должны учитывать.

  • Я действительно думаю, что у вас должно быть множество имен для таблиц; некоторые думают единственное. Прочитайте аргументы в другом месте. Имена столбцов должны быть единственными. Даже если вы используете множественные имена таблиц, таблицы, представляющие комбинации других таблиц, могут быть в единственном числе. Например, если у вас есть таблица Promotions and Items, таблица, представляющая элемент, являющийся частью рекламной акции, может быть Promotions_Items, но она также может быть законно выражена как Promotion_Items (отражающая отношения «один ко многим»).
  • Используйте подчеркивания последовательно и для определенной цели. Просто имена общих таблиц должны быть достаточно ясными с PascalCasing; вам не нужны символы подчеркивания для разделения слов. Сохраните подчеркивания либо (a), чтобы указать ассоциативную таблицу, либо (b) для префикса, которые я буду указывать в следующей броне.
  • Префикс не является ни хорошим, ни плохим. Обычно это не лучше. В вашем первом db или двух я бы не предложил использовать префиксы для общей тематической группировки таблиц. Таблицы в конечном итоге не подходят для ваших категорий, и это может затруднить поиск таблиц. Имея опыт, вы можете планировать и применять схему префикса, которая приносит больше пользы, чем вреда. Я работал в db один раз, когда таблицы данных начинались с tbl , таблицы config с ctbl , представлениями с vew , sp sp и fd udf и некоторые другие; это было тщательно, последовательно применялось, так что все получилось хорошо. Единственный раз, когда вам нужны префиксы, – когда у вас действительно есть отдельные решения, которые по какой-то причине находятся в одном и том же дБ; их префиксы могут быть очень полезны при группировке таблиц. Префикс также подходит для особых ситуаций, например, для временных таблиц, которые вы хотите выделить.
  • Очень редко (если когда-либо) вы хотели бы префикс столбцов.

Хорошо, поскольку мы взвешиваем мнение:

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

Для тех, кто любит видеть уникальные «имена сущностей» в запросах, я хотел бы использовать псевдонимы таблиц для:

 SELECT person.Name FROM People person 

Немного похоже на LINQ «от человека в людях выбирают person.Name».

Что касается 2, 3 и 4, я согласен с @Lars.

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

  1. Любой стандарт именования лучше, чем стандартный.
  2. Не существует «одного истинного» стандарта, у всех нас есть свои предпочтения
  3. Если стандарт уже установлен, используйте его. Не создавайте другой стандарт или мутные существующие стандарты.

Мы используем уникальные имена для таблиц. Таблицы имеют префикс с именем системы (или ее сокращением). Это полезно, если системный комплекс, поскольку вы можете изменить префикс для логической группировки таблиц (например, reg_customer, reg_booking и regadmin_limits).

Для полей мы ожидаем, что имена полей будут содержать префикс / acryonm таблицы (т.е. cust_address1), и мы также предпочитаем использовать стандартный набор суффиксов (_id для PK, _cd для «code», _nm для «name» “, _nb для” number “, _dt для” Date “).

Имя поля ключа Foriegn должно совпадать с полем основного поля.

т.е.

 SELECT cust_nm, cust_add1, booking_dt FROM reg_customer INNER JOIN reg_booking ON reg_customer.cust_id = reg_booking.cust_id 

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

  1. Нет. Стол должен быть назван в честь объекта, который он представляет. Человек, а не люди, – это то, как вы относитесь к тому, кто представляет из себя одну из записей.
  2. Опять же, то же самое. Столбец FirstName действительно не следует называть FirstNames. Все зависит от того, что вы хотите представить в столбце.
  3. NO.
  4. Да. Делайте это для ясности. Если вам нужны столбцы типа «FirstName», корпус упростит чтение.

ОК. Это мои $ 0.02

Я также выступаю за соглашение об именовании стилей ISO / IEC 11179, отмечая, что они являются рекомендациями, а не предписывающими.

См. Имя элемента данных в Википедии :

«Таблицы – это коллекции сущностей и следуют правилам именования коллекций. В идеале используется коллективное имя: например,« Персонал ». Плюрализм также правильный:« Сотрудники ». Неверные имена include:« Сотрудник »,« tblEmployee »и« EmployeeTable »».

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

наши предпочтения:

  1. Должны ли имена таблиц быть множественными?
    Никогда. Аргументы для него – это коллекция, но вы никогда не знаете, что таблица будет содержать (0,1 или много элементов). Множественные правила делают именование излишне сложным. 1 дом, 2 дома, мышь против мышей, человек против людей, и мы даже не смотрели ни на какие другие языки.

    Update person set property = 'value' действует для каждого человека в таблице.
    Select * from person where person.name = 'Greg' возвращает набор строк / строк набора строк.

  2. Должны ли имена столбцов быть единственными?
    Обычно, да, кроме случаев, когда вы нарушаете правила нормализации.

  3. Должен ли я префикс таблиц или столбцов?
    В основном предпочтение от платформы. Мы предпочитаем префикс столбцов с именем таблицы. Мы не префиксные таблицы, но мы делаем префиксные представления (v_) и stored_procedures (sp_ или f_ (function)). Это помогает людям, которые хотят попробовать обновить v_person.age, который на самом деле является вычисленным полем в представлении (которое не может быть UPDATEd в любом случае).

    Это также отличный способ избежать столкновения с ключевыми словами (доставка. От перерывов, но delivery_from – нет).

    Это делает код более подробным, но часто помогает в удобочитаемости.

    bob = new person()
    bob.person_name = 'Bob'
    bob.person_dob = '1958-12-21'
    … очень читабельна и ясна. Это может выйти из-под контроля:

    customer.customer_customer_type_id

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

    или где у вас есть отношения MM между customer_type и customer_category (для определенных категорий доступны только определенные типы)

    customer_category_customer_type_id

    … немного (!) на длинной стороне.

  4. Должен ли я использовать любой случай в именовании элементов? Да – нижний регистр :), с подчеркиванием. Это очень читаемая и кросс-платформа. Вместе с 3 выше это также имеет смысл.

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

Взгляните на ISO 11179-5: Принципы именования и идентификации. Вы можете получить его здесь: http://metadata-standards.org/11179/#11179-5

Я писал об этом некоторое время назад: ISO-11179 Соглашения об именах

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

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

  2. Если вы используете единственную версию имени таблицы И префикс первичного ключа с именем таблицы, теперь у вас есть преимущество в том, что вы легко можете определить имя таблицы из первичного ключа или наоборот с помощью кода. Вы можете получить переменную с именем таблицы в ней, объединить «Id» до конца, и теперь у вас есть первичный ключ таблицы через код, без необходимости делать дополнительный запрос. Или вы можете отключить «Id» с конца первичного ключа, чтобы определить имя таблицы через код. Если вы используете «id» без имени таблицы для первичного ключа, вы не можете через код определить имя таблицы из первичного ключа. Кроме того, большинство людей, которые используют множественные имена таблиц и префиксные столбцы PK с именем таблицы, используют сингулярную версию имени таблицы в PK (например, статусы и statusId), что делает невозможным это сделать вообще.

  3. Если вы создадите уникальные имена таблиц, вы можете сопоставить имена classов, которые они представляют. Еще раз, это может упростить код и позволить вам делать действительно аккуратные вещи, такие как создание экземпляра classа, имея только имя таблицы. Это также просто делает ваш код более последовательным, что приводит к …

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

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

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

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

Например, учитывая таблицы «клиент» и «адрес», давайте перейдем с префиксами «cust» и «addr» соответственно. «клиент» имел бы «cust_id», «cust_name» и т. д. в нем. «адрес» будет иметь «addr_id», «addr_cust_id» (FK обратно клиенту), «addr_street» и т. д. в нем.

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

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

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

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

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

 SELECT cust_id, cust_name, addr_street, addr_city, addr_state FROM customer INNER JOIN address ON addr_cust_id = cust_id WHERE cust_name LIKE 'J%'; 

Мое мнение по этому поводу:

1) Нет, имена таблиц должны быть единственными.

Хотя кажется, что имеет смысл для простого выбора ( select * from Orders ), он имеет меньшее значение для эквивалента OO ( Orders x = new Orders ).

Таблица в БД – это действительно набор этого сущностей, он имеет больше смысла, когда вы используете set-logic:

 select Orders.* from Orders inner join Products on Orders.Key = Products.Key 

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

Я не уверен в том, что всегда использую псевдоним (как утверждает Мэтт).

2) Они должны быть единственными, поскольку они содержат только одно свойство

3) Никогда, если имя столбца неоднозначно (как указано выше, где оба они имеют столбец с именем [Key]), имя таблицы (или ее псевдоним) может отличать их достаточно хорошо. Вы хотите, чтобы запросы были быстрыми и понятными – префиксы добавляют излишнюю сложность.

4) Что бы вы ни хотели, я бы предложил CapitalCase

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

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

По моему мнению:

  1. Названия таблиц должны быть множественными.
  2. Имена столбцов должны быть единственными.
  3. Нет.
  4. Либо CamelCase (мой предпочтительный), либо underscore_separated для имен таблиц и имен столбцов.

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

  1. Определенно, чтобы имена таблиц были единичными, люди не люди
    1. Тоже самое
    2. Нет. Я видел некоторые ужасные префиксы, договариваясь о том, что имеет дело с таблицей (tbl_) или процедурой хранения пользователя (usp_). Затем следует имя базы данных … Не делайте этого!
    3. Да. Я склонен к PascalCase всем моим именам таблиц

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

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

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

На всякий случай, вот мои ответы:

  1. Да. Таблица представляет собой группу записей , учителей или актеров , поэтому … множественное число.
  2. Да.
  3. Я их не использую.
  4. База данных, которую я использую чаще всего – Firebird – хранит все в верхнем регистре, поэтому это не имеет значения. Во всяком случае, когда я программирую, я пишу имена так, чтобы их было легче читать, например releaseYear .

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

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

Вот мои ответы:

  1. Да, имена таблиц должны быть множественными, если они относятся к совокупности сделок , ценных бумаг или контрагентов, например.
  2. Да.
  3. Да. Таблицы SQL с префиксом tb_, представления имеют префикс vw_, хранимые процедуры имеют префикс usp_, а триггеры имеют префикс tg_, за которым следует имя базы данных.
  4. Название столбца должно быть в нижнем регистре, разделенное знаком подчеркивания.

Именование жестко, но в каждой организации есть кто-то, кто может назвать вещи, и в каждой команде программного обеспечения должен быть кто-то, кто берет на себя ответственность за стандарты именования и гарантирует, что проблемы с именами , такие как sec_id , sec_value и security_id, будут решены раньше, чем они будут запеканы в проекте ,

Итак, каковы основные принципы хорошего соглашения и стандартов именования:

  • Использовать язык вашего клиента и домен вашего решения.
  • Быть описательным
  • Быть последовательным
  • Разборчивость, reflection и рефакторинг
  • Не используйте аббревиатуры, если они не понятны всем
  • Не используйте зарезервированные ключевые слова SQL в качестве имен столбцов

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

http://justinsomnia.org/writings/naming_conventions.html

Имена таблиц всегда должны быть единственными, потому что они представляют собой набор объектов. Как вы говорите, стадо назначать группу овец, или стадо обозначают группу птиц. Нет необходимости во множественном числе. Когда имя таблицы представляет собой состав из двух имен, а соглашение об именах во множественном числе, становится трудно узнать, должно ли имя множественного числа быть первым словом или вторым словом или и тем, и другим. Это логика – Object.instance, а не object.instance. Или TableName.column, а не TableNames.column (s). Microsoft SQL не чувствителен к регистру, легче читать имена таблиц, если используются буквы верхнего регистра, для разделения имен таблиц или столбцов, когда они состоят из двух или более имен.

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

Название столбца: оно должно быть единственным, только тогда оно передает, что оно будет обладать атомной величиной и подтвердит теорию нормализации. Если, однако, существует n число одинаковых типов свойств, то они должны быть суффиксами с 1, 2, …, n и т. Д.

Префикс Столы / Столбцы: Это огромная тема, которая будет обсуждаться позже.

Корпус: это должен быть чехол Camel

Мой друг, Патрик Карчер , я прошу вас не писать ни о чем, что может быть оскорбительным для кого-то, как вы писали ». Кроме того, иностранные ключи должны быть последовательно названы в разных таблицах. Должно быть законно избивать кого-то, кто этого не делает сделай это.”. Я никогда не совершал этой ошибки, мой друг Патрик, но я пишу вообще. Что, если они вместе планируют избить тебя за это? 🙂

Очень поздно вечеринке, но я все еще хотел добавить свои два цента о префиксах столбцов

Кажется, что есть два основных аргумента в пользу использования стандартного именования table_column (или tableColumn) для столбцов, основанного на том факте, что само имя столбца будет уникальным для всей вашей базы данных:

1) Вам не нужно постоянно указывать имена таблиц и / или псевдонимов столбцов в ваших запросах

2) Вы можете легко найти весь код для имени столбца

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

Всегда используйте имя таблицы в своем SQL. Например, всегда используйте table.column вместо столбца.

Очевидно, он решает 2), поскольку теперь вы можете просто искать table.column вместо table_column.

Но я слышу, как вы кричите, как он решает 1)? Это было как раз об этом. Да, это было, но решение было ужасно ошибочным. Зачем? Ну, префиксное решение сводится к:
Чтобы избежать необходимости указывать table.column, когда есть двусмысленность, вы называете все свои столбцы table_column!
Но это означает, что вы теперь будете ВСЕГДА писать имя столбца каждый раз, когда вы укажете столбец. Но если вы все равно должны это делать, то в чем преимущество, всегда явно пишем table.column? Точно, нет никакой выгоды, это то же самое количество символов для ввода.

edit: да, я знаю, что именование столбцов с префиксом обеспечивает правильное использование, тогда как мой подход зависит от программистов

Essential Database Naming Conventions (and Style) (click here for more detailed description)

table names choose short, unambiguous names, using no more than one or two words distinguish tables easily facilitates the naming of unique field names as well as lookup and linking tables give tables singular names, never plural (update: i still agree with the reasons given for this convention, but most people really like plural table names, so i’ve softened my stance)… follow the link above please

 SELECT UserID, FirstName, MiddleInitial, LastName FROM Users ORDER BY LastName 

Table names singular. Let’s say you were modelling a realtionship between someone and their address. For example, if you are reading a datamodel would you prefer ‘each person may live at 0,1 or many address.’ or ‘each people may live at 0,1 or many addresses.’ I think its easier to pluralise address, rather than have to rephrase people as person. Plus collective nouns are quite often dissimlar to the singular version.

 --Example SQL CREATE TABLE D001_Students ( StudentID INTEGER CONSTRAINT nnD001_STID NOT NULL, ChristianName NVARCHAR(255) CONSTRAINT nnD001_CHNA NOT NULL, Surname NVARCHAR(255) CONSTRAINT nnD001_SURN NOT NULL, CONSTRAINT pkD001 PRIMARY KEY(StudentID) ); CREATE INDEX idxD001_STID on D001_Students; CREATE TABLE D002_Classes ( ClassID INTEGER CONSTRAINT nnD002_CLID NOT NULL, StudentID INTEGER CONSTRAINT nnD002_STID NOT NULL, ClassName NVARCHAR(255) CONSTRAINT nnD002_CLNA NOT NULL, CONSTRAINT pkD001 PRIMARY KEY(ClassID, StudentID), CONSTRAINT fkD001_STID FOREIGN KEY(StudentID) REFERENCES D001_Students(StudentID) ); CREATE INDEX idxD002_CLID on D002_Classes; CREATE VIEW V001_StudentClasses ( SELECT D001.ChristianName, D001.Surname, D002.ClassName FROM D001_Students D001 INNER JOIN D002_Classes D002 ON D001.StudentID = D002.StudentID ); 

These are the conventions I was taught, but you should adapt to whatever you developement hose uses.

  1. Plural. It is a collection of entities.
  2. Да. The attribute is a representation of singular property of an entity.
  3. Yes, prefix table name allows easily trackable naming of all constraints indexes and table aliases.
  4. Pascal Case for table and column names, prefix + ALL caps for indexes and constraints.
Давайте будем гением компьютера.