Найменування таблиці: Підкреслення проти Camelcase? простори імен? Однина проти множини?


89

Я читав кілька запитань / відповідей на StackOverflow, намагаючись знайти "найкращий", або, я повинен сказати, повинен бути прийнятий спосіб, називати таблиці в базі даних.

Більшість розробників схильні називати таблиці залежно від мови, для якої потрібна база даних (JAVA, .NET, PHP тощо). Однак я просто вважаю, що це не правильно.

Те, як я досі називав таблиці, робить щось на зразок:

doctorsMain
doctorsProfiles
doctorsPatients
patientsMain
patientsProfiles
patientsAntecedents 

Мене турбують такі речі:

  • Розбірливість
  • Швидке визначення модуля, з якого походить таблиця (лікарі || пацієнти)
  • Легко зрозуміти, запобігти плутанині.

Я хотів би прочитати будь-які думки щодо конвенцій щодо імен. Дякую.

Відповіді:


180

Бути послідовним набагато важливіше, ніж яку саме схему ви використовуєте.


21
Іншими словами, так, молодці, ви визначили кілька послідовних схем. Продовжуйте!
Phil H

3
+1 за коментар. Крім того, в додатковій примітці до поточної схеми іменування PascalCase краще, особливо якщо ви не використовуєте псевдоніми для запитів SQL. Таким чином, ви можете просто використовувати верблюд для імен стовпців таблиці та Case Pascal для імен таблиць.
MarioRicalde

3
Корпус Паскаль / верблюд для назв таблиць може призвести до деяких проблем. Кожна таблиця матиме файл у файловій системі, а деякі з них не враховують регістр (наприклад, OSX).
ismriv

2
@ismriv це проблема лише у випадку, якщо ви непослідовні, якщо ви завжди маєте на увазі таблиці / подання / стовпці з тим самим послідовним регістром, у вас не повинно виникнути проблем, якщо не полінуватися при написанні цих імен, ви отримаєте великий перевага пізніше при читанні. Використання PascalCase для таблиць та camelCase для стовпців допомагає швидко визначити тип імені, а також імітує загальноприйняті об'єктно-орієнтовані конвенції.
TWiStErRob

Я повністю згоден , що послідовність є ключовою, але це старе питання , і для людей , що використовують нові платформи баз даних , як Redshift і Сніжинка , які по замовчуванням для ідентифікаторів або всіх верхнього або нижнього регістру, я хотів би додати , що це дуже важливо думати про ваш конвенції про іменування з самого початку. Якщо ви вирішите використовувати на цих платформах правила іменування, такі як Camel Case, це може призвести до зайвих головних болів пізніше, наприклад, вам доведеться весь час використовувати вказані ідентифікатори, і роздільна здатність назв об’єктів може дати несподівані результати.
Натан Гріффітс,

22

Я зазвичай використовую PascalCase, і сутності є одниною:

DoctorMain
DoctorProfile
DoctorPatient

Він імітує правила іменування класів у моїй програмі, зберігаючи все досить акуратно, чисто, послідовно та легко для розуміння для всіх.


3
Так ... так. Сьогодні вранці я трохи туманний. Змінюємо ... дякую.
Джастін Нісснер

3
Він також відомий як "CapitalCase".
corsiKa

3
За свій 30-річний досвід я ніколи не чув, як його називають "CapitalCase". Найбільше я чув, що це називають "справою верблюда", а нещодавно розглядали "справу Паскаля". Я прийшов сюди, щоб зрозуміти, чому люди, здається, використовують регістр верблюдів для SQL, коли історично він здебільшого не враховував регістр. Я точно не хочу відставати від часу.
Sinthia V

@SinthiaV Я не знаю про інших, але в нашому випадку, оскільки ми використовуємо JS ORM (на жаль), варіанти були 1) умова про перерву за допомогою camelCase у db 2) умова про перерву за допомогою snake_case у JS 3) карта camelCase у JS до snake_case у db. Ми вирішили без особливих початкових роздумів використовувати camelCase в базі даних, і це було не так вже й погано, але цитувати все це трохи клопоту.
Енді,

@SinthiaV як марний коментар, який може бути в контексті фактичного запитання SO, PascalCase - це не те саме, що camelCase. PascalCase пише з великої літери першу літеру кожного слова (що має вирішальне значення, включаючи першу), тоді як camelCase пише великі літери лише після першої. Подальше читання: medium.com/better-programming / ...
страньше

11

Нечутливий до регістру характер підтримки SQL Underscores_Scheme. Однак сучасне програмне забезпечення підтримує будь-які схеми імен. Однак іноді деякі неприємні помилки, помилка або людський фактор може привести до UPPERCASINGEVERYTHINGтак , що ті, хто вибрав як Pascal_Caseі Underscore_Caseсхему жити з усіма своїми нервами в хорошому місці.


10

Сукупність більшості з наведеного:

  • не покладайтесь на регістр у базі даних
  • не розглядайте регістр чи розділ назви - лише слова
  • використовуйте будь-який роздільник або регістр, що є стандартом для вашої мови

Тоді ви можете легко перекладати (навіть автоматично) імена між середовищами.

Але я хотів би додати ще одне зауваження: ви можете виявити, що при переході з класу у вашому додатку до таблиці у вашій базі даних існують інші фактори: об’єкт бази даних має подання, тригери, збережені procs, індекси, обмеження тощо - що також потрібні імена. Так, наприклад, ви можете виявити, що отримуєте доступ до таблиць лише за допомогою подань, які, як правило, є простою "select * from foo". Вони можуть бути ідентифіковані як назви таблиці лише з суфіксом '_v', або ви можете помістити їх в іншу схему. Призначення такого простого шару абстракції полягає в тому, що його можна розширити, коли це необхідно, щоб дозволити зміни в одному середовищі, щоб уникнути впливу на інше. Це не порушить наведені вище пропозиції щодо імен - лише кілька речей, на які слід зважати.


8

Я використовую підкреслення. Я робив проект Oracle кілька років тому, і здавалося, що Oracle змусив усі мої імена об'єктів ставити до верхнього регістру, що загрожує будь-якій схемі кожуха. Я насправді не хлопець-оракул, тож, можливо, був такий спосіб, про який я не знав, але це змусило мене підкреслити, і я ніколи не повертався назад.


2
У 11g та новіших випадках регістр, здається, зберігається, якщо ім'я таблиці обертається подвійними лапками. Помістивши це тут для подальшого використання. Я точно знаю, що Postgres робить це так само, інші двигуни db можуть цього не робити.
Джон О

8

Оскільки питання не стосується конкретної платформи або механізму БД, я повинен сказати, для максимальної переносимості, ви завжди повинні використовувати імена таблиць у нижньому регістрі.

/ [a-z _] [a-z0-9 _] * / насправді є єдиним шаблоном імен, який легко перекладається між різними платформами. Малі та цифрові цифри + підкреслення завжди працюватимуть послідовно.

Як вже згадувалося в іншому місці, імена відношень (таблиць) повинні бути в однині: http://www.teamten.com/lawrence/programming/use-singular-nouns-for-database-table-names.html


Я згоден - підкреслення має найменше проблем у порівнянні з Паскалем чи верблюжим кожухом. Особливо, коли ви називаєте подорожі до моделей, dto та fronttend в кінці.
Саулій

6

Я схильний погодитися з людьми, які кажуть, що це залежить від умов мови, якими ви користуєтесь (наприклад, PascalCase для C # та snake_case для Ruby).

Хоча ніколи не camelCase.


2
Ада: Pascal_Case_With_Underscores
uetoyo

6
Це не має сенсу, коли ви хочете отримати доступ до однієї таблиці двома різними мовами, які мають різні правила іменування.
Даніель В.

5

Після прочитання багатьох інших думок, я вважаю, що дуже важливо використовувати конвенції про іменування мови, послідовність важливіша за конвенції про іменування, лише якщо ви (і будете) єдиним розробником програми. Якщо ви хочете читабельності (що має величезне значення), краще використовуйте правила іменування для кожної мови. Наприклад, у MySQL я не пропоную використовувати CamelCase, оскільки не всі платформи чутливі до регістру. Тож підкреслення іде краще.


1
Абсолютно згоден !!! Особливо з MySql, коли ви запускаєте його на вікнах, все стає від camelCaseдо camelcase. Отже, мати зміїний футляр набагато краще. Також щодо Modern software however supports any kind of naming schemeвас немає жодних гарантій, що yop напише код останньої версії soft. Особливо для бази даних - оновлення версій не є тривіальним, коли ви думаєте про витрати на регресію.
Вишня

2

Це мої п’ять центів. Я дійшов висновку, що якщо для одного проекту використовуються БД різних постачальників, існує два найкращих способи:

  1. Використовуйте підкреслення.
  2. Використовуйте верблюжий футляр із цитатами.

Причина полягає в тому, що деяка база даних перетворить усі символи на великі, а деякі - на малі. Отже, якщо у вас myTableце стане, MYTABLEчи mytableколи ви будете працювати з БД.


1

На жаль, немає "найкращої" відповіді на це питання. Оскільки @David заявив, послідовність набагато важливіша за конвенцію про іменування.


1

існує велика варіативність того, як розділяти слова, тому там вам доведеться вибирати все, що вам більше подобається; але в той же час, здається, є майже консенсус щодо того, що назва таблиці має бути в однині.


1

Правила іменування існують у межах мови, а різні мови мають різні правила іменування.

SQL за замовчуванням не враховує регістр; отже, snake_case - це широко використовувана конвенція. SQL також підтримує розділені ідентифікатори; отже, змішаний регістр у такому варіанті, як camelCase (Java, де поля == стовпці) або PascalCase (C #, де таблиці == класи та стовпці == поля). Якщо ваш механізм БД не може підтримувати стандарт SQL, це його проблема. Ви можете вирішити жити з цим або вибрати інший двигун. (І чому C # просто повинен бути іншим, це момент загострення для тих з нас, хто кодує обидва.)

Якщо ви збираєтесь коли-небудь використовувати лише одну мову у своїх послугах та програмах, використовуйте правила цієї мови на всіх рівнях. В іншому випадку використовуйте найбільш широко використовувані правила мови в домені, де ця мова використовується.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.