Я не совсем уверен, существует ли стандарт в промышленности или иначе, таким образом, я спрашиваю здесь.
Я называю таблицу Users, и я не совсем уверен в том, как назвать участников.
user_id
очевидный, но интересно, должен ли я снабдить префиксом все другие поля "пользователя _" или нет.
user_name user_age
или просто имя и возраст, и т.д...
подобные префиксы бессмысленны, если только у вас нет чего-то более произвольного, например двух адресов. Тогда вы можете использовать адрес_1, адрес_2, адрес_дома и т.д.
То же самое с телефонными номерами.
Но для таких статичных вещей, как возраст, пол, имя пользователя и т.д., я бы просто оставил их в таком виде.
Просто чтобы показать вам. Если бы вы поставили префикс для всех этих полей, ваши запросы могли бы выглядеть так
SELECT users.user_id FROM users WHERE users.user_name = "Jim"
В то время как они могли бы выглядеть так
SELECT id FROM users WHERE username = "Jim"
Для имен таблиц я обычно использую существительные во множественном числе (или фразы существительных), как вы.
Для имен столбцов я бы не использовал имя таблицы в качестве префикса. Сама таблица определяет контекст колонки.
Это личное предпочтение. Лучший совет, который мы можем вам дать, - это последовательность, разборчивость и обеспечение правильного именования отношений.
По возможности используйте имена, которые имеют смысл и не являются сокращенными, если только используемый вами механизм хранения не работает с ними хорошо.
В отношениях мне нравится использовать Id для первичного ключа и [имя_таблицы]_Id для внешнего ключа. Например, Order.Id и OrderItem.OrderId
Id хорошо работает, если в качестве первичного ключа используется суррогатный ключ.
Также ваш механизм хранения может быть или не быть чувствительным к регистру, поэтому обязательно учитывайте это.
Edit: Кроме того, существует теория, согласно которой таблица должна называться в честь того, что должна представлять собой одна запись в этой таблице. Так, название таблицы "User" вместо "Users" - лично для меня множественное число имеет больше смысла, просто соблюдайте последовательность.
Как показывают другие ответы, это личное предпочтение - выбрать определенную схему именования и придерживаться ее.
Около 10 лет назад я работал с Oracle Designer, и он использует схему именования, которую я люблю и использую с тех пор:
Необязательно:
Опять же, выберите схему именования, которая вам нравится, и будьте последовательны.
Я согласен с другими ответами, в которых предлагается не указывать префиксы атрибутов именами таблиц.
Тем не менее, я поддерживаю идею использования совпадающих имен для внешних ключей и первичного ключа, на который они ссылаются 1 , и для этого вам обычно нужно использовать префикс id
атрибуты в зависимой таблице.
Что-то не очень хорошо известно, так это то, что SQL поддерживает краткий синтаксис соединения с использованием ключевого слова USING
:
CREATE TABLE users (user_id int, first_name varchar(50), last_name varchar(50));
CREATE TABLE sales (sale_id int, purchase_date datetime, user_id int);
Затем следующий запрос:
SELECT s.*, u.last_name FROM sales s JOIN users u USING (user_id);
эквивалентен более подробному и популярному синтаксису соединения :
SELECT s.*, u.last_name FROM sales s JOIN users u ON (u.user_id = s.user_id);
1 Это не всегда возможно. Типичным примером является поле user_id
в таблице users
и поля report_by
и assign_to
в ссылочной таблице, которые оба ссылаются на пользователей
таблица. Использование поля user_id
в таких ситуациях неоднозначно и невозможно для одного из полей.
Во-первых, я бы предложил использовать существительное в единственном числе, т.е. user вместо users, хотя это скорее личное предпочтение.
Во-вторых, есть те, кто предпочитает всегда называть столбец первичного ключа id, вместо user_id (т.е. имя таблицы + id), и аналогично, например, name вместо employee_name. Я думаю, что это плохая идея по следующей причине:
-- when every table has an "id" (or "name") column, you get duplicate column names in the output:
select e.id, e.name, d.id, d.name
from employee e, department d
where e.department_id = d.id
-- to avoid this, you need to specify column aliases every time you query:
select e.id employee_id, e.name employee_name, d.id department_id, d.name department_name
from employee e, department d
where e.department_id = d.id
-- if the column name includes the table, there are no conflicts, and the join condition is very clear
select e.employee_id, e.employee_name, d.department_id, d.department_name
from employee e, department d
where e.department_id = d.department_id
Я не говорю, что вы должны включать имя таблицы в каждый столбец таблицы, но сделайте это для ключевого столбца (id) и других "общих" столбцов, таких как имя, описание, замечания и т. д., которые, вероятно, будут включены в запросы.
Просто укажите имя и возраст, таблица должна обеспечить необходимый контекст, когда вы задаетесь вопросом, с каким именем вы работаете.
Рассматривайте его как сущность и называйте поля соответственно
Я бы предложил таблицу User с такими полями, как id, имя, возраст и т. д.
Группа записей - это совокупность пользователей, а группа полей представляет пользователя.
Таким образом, в итоге вы ссылаетесь на user.id
, user.name
, user.age
(хотя вы не всегда будете включать имя таблицы, в зависимости от запроса).