Должны ли имена столбцов быть уникальными во всех таблицах? - PullRequest
3 голосов
/ 19 февраля 2012

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

Person Table
 - PersonID
 - PersonName
 - PersonSurName
 - PersonTimestamp

Customer Table
 - CustomerID
 - CustomerName
 - CustomerSurName
 - CustomerTimestamp

Вместо того, чтобы иметь

Person Table
 - ID
 - Name
 - SurName
 - Timestamp

Customer Table
 - ID
 - Name
 - SurName
 - Timestamp

Но мне было интересно, действительно ли это лучше, удобнее и понятнее в будущем.Может быть, некоторые столбцы, такие как timestamp, лучше оставить во всех таблицах как Timestamp?Есть ли какая-нибудь общая хорошая практика по этому поводу?Я использую эти базы данных в C # / WinForms.

Ответы [ 7 ]

6 голосов
/ 19 февраля 2012

Мне не нравится ни один пример.Я бы предпочел:

Person Table
 - PersonID     -- not ID, since this is likely to be referenced in other tables
 - FirstName    -- why is a first name just a "name"?
 - LastName     -- why not use the form more common than surname?
 - ModifiedDate -- what is a "persontimestamp"?

Я категорически против того, чтобы первичные ключи, которые будут встречаться в других таблицах модели, были названы общими вещами, такими как «ID» - я никогда не хочу видеть ON p.ID = SomeOtherTable.PersonID - сущность, которая является общей для нескольких таблиц в модели, должна называться последовательно по всей модели.Другие аспекты, такие как FirstName, принадлежат только этой таблице - даже если другая таблица имеет имя FirstName, это не та же «сущность», так сказать.И даже если по каким-либо причинам у вас когда-либо есть соединения между этими двумя таблицами, вы всегда будете различать их как Person.FirstName и Customer.FirstName - поэтому добавление префикса Person или Customer просто избыточно и раздражаетдля любого, кто должен написать такой запрос.

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

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

3 голосов
/ 19 февраля 2012

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

  1. Это ненужное повторение
  2. Сложнее поддерживать, потому что, если имя таблицы изменится в будущем, все столбцы будут нуждаться в переименовании.
  3. Соглашение может быть непонятным для другого исполнителя ниже по строке
  4. Когда вы выполняете запрос, вы всегда можете создать псевдоним столбцов в этой точке, если вам нужно имя таблицы в них.

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

2 голосов
/ 19 февраля 2012

Uggghhh, я думаю, я просто слишком ленив, поэтому я бы сделал Department.ID вместо Department.DepartmentID. У меня достаточно избыточной работы, достаточно, как есть.

2 голосов
/ 19 февраля 2012

Ваш первый пример лучше на мой взгляд. (Второй сбивает с толку при построении запросов и часто требует ключевое слово AS sql)

Однако в моем магазине мы используем немного другое соглашение.
PrimaryKey - имя этого столбца должно начинаться с ID, за которым следует имя таблицы (IDPerson)
ForeingKey - имена столбцов должны начинаться с ID, за которым следует имя внешней таблицы (IDDepartment)
OtherColumns - они должны иметь осмысленное имя для содержащихся данных. Повторять имя таблицы необходимо только для тех полей, которые в разных таблицах будут иметь одинаковые имена.

При использовании параметров для вызова хранимой процедуры необходимо изменить соглашение (@personID, @departmentID)

1 голос
/ 19 февраля 2012

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

Лично мне нравится ваш второй вариант. Повторять имя таблицы в имени столбца, является ненужным повторением.

1 голос
/ 19 февраля 2012

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

0 голосов
/ 20 декабря 2016

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

--------------------
 pe_people
--------------------
  pe_personID (PK)
  pe_firstName
  pe_lastName
  pe_timeStamp
--------------------

--------------------
 ac_accounts
--------------------
  ac_accountID (PK)
  ac_personID (FK)
  ac_accountName
  ac_accountBalance
--------------------
SELECT pe_firstName, pe_lastName, pe_accountName, pe_accountBalance
FROM pe_people
INNER JOIN ac_accounts ON (ac_personID = pe_personID)
WHERE pe_timeStamp > '2016-01-01';
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...