I лично предпочитают (как было указано выше) Table.ID для PK и TableID для FK . Даже (пожалуйста, не стреляйте в меня) Microsoft Access рекомендует это.
ОДНАКО, я ТАКЖЕ знаю, что некоторые инструменты генерации предпочитают TableID для PK, потому что они имеют тенденцию связывать все имена столбцов, которые содержат 'ID' в слове, ВКЛЮЧАЯ ID !! !
Даже конструктор запросов делает это на Microsoft SQL Server (и для каждого создаваемого вами запроса вы в конечном итоге срываете все ненужные вновь созданные отношения для всех таблиц с идентификатором столбца)
ТАК Как мой внутренний OCD ненавидит это, я катлюсь с соглашением TableID . Давайте вспомним, что он называется Data BASE , так как он, как мы надеемся, станет основой для многих и многих приложений. И все технологии должны быть хорошо отлажены с четким описанием схемы.
Само собой разумеется, что я действительно рисую свою линию, когда люди начинают использовать TableName, TableDescription и тому подобное. На мой взгляд, конвенции должны делать следующее:
- Название таблицы: множественное число. Ex. Сотрудники
Псевдоним таблицы: полное имя таблицы, в единственном числе. Ex.
SELECT Employee.*, eMail.Address
FROM Employees AS Employee LEFT JOIN eMails as eMail on Employee.eMailID = eMail.eMailID -- I would sure like it to just have the eMail.ID here.... but oh well
[Update]
Кроме того, в этой теме есть несколько действительных сообщений о дублированных столбцах из-за «вида отношений» или роли. Например, если в Магазине есть EmployeeID , это говорит мне о приседе. Поэтому я иногда делаю что-то вроде Store.EmployeeID_Manager . Конечно, он немного больше, но как минимум люди не будут сходить с ума, пытаясь найти таблица ManagerID или что там делает EmployeeID . Когда запрашивается ГДЕ, я бы упростил его как:
SELECT EmployeeID_Manager в качестве ManagerID из хранилища