2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

サンプルデータベースでみる SQL Server のオブジェクトのネーミングルール

Last updated at Posted at 2020-10-15

SQL Server では、Microsoft からいくつかのサンプルデータベースが提供されています。

現在、サンプルとして利用される機会の多いデータベースは「AdventureWorks」「WideWorldImporters」の 2 種類となりますが、これらのデータベースでは、どのようなネーミングルール (命名規則) が使用されているのかを確認してみました。

最新のサンプル DB は WideWorldImporters ですので、こちらの規則のほうが最新なのかもしれませんね。

SQL Server ではポリシーベースの管理を行うことができ、次のドキュメントでは機能を使用して命名規則を設定しています。

ポリシーのサンプルは次のリポジトリでも公開されています。
(SSMS をインストールしている環境であれば、C:\Program Files (x86)\Microsoft SQL Server\140\Tools\Policies あたりにも入っているかと)

策定したネーミングルールはこのようなポリシー機能を使って強制をすることも考慮できるのではないでしょうか。

ネーミングルール

命名の基本

  • パスカルケース (アッパーキャメルケース) を利用 (WideWorldImporters / CustomerCategories)

データベース

  • パスカルケース (アッパーキャメルケース) を利用 (WideWorldImporters/ CustomerCatAdventureWorks2017gories)

テーブル

  • AdventureWorks : プレフィックスは使用しない (Department)
  • WideWorldImporters : プレフィックスは使用しない (SupplierTransactions)

ビュー

  • AdventureWorks : プレフィックスとして v を使用 (vSalesPerson)
    • v<ビュー名>
  • WideWorldImporters : プレフィックスは使用しない (Customers)

ストアドプロシージャ

  • AdventureWorks : プレフィックスとして usp を使用 (uspLogError)
    • usp<ストアドプロシージャ名>
  • WideWorldImporters : プレフィックスは使用しない (SearchForPeople)

関数

  • AdventureWorks : プレフィックスとして ufn を使用 (ufnGetAccountingEndDate)
    • ufn<関数名>
  • WideWorldImporters : プレフィックスは使用しない (CalculateCustomerPrice)

トリガー

  • AdventureWorks : プレフィックスとしてトリガーの対象 (i / u / d ) を使用 (uWorkOrder / dVendor / iduSalesOrderDetail)
    • <トリガーの処理対象 (複数ある場合は、idu を順に記載><テーブル名>
  • WideWorldImporters : トリガーが存在しない

チェック制約

  • AdventureWorks : プレフィックスとして CK_ を使用 (CHECK_CONSTRAINT)
    • CK_<テーブル名>_<列名>
  • WideWorldImporters : プレフィックスとして CK_ を使用 (CK_Sales_Invoices_ReturnedDeliveryData_Must_Be_Valid_JSON)
    • CK_<スキーマ名>_<テーブル名>_<列名>_<制約の説明>

デフォルト制約

  • AdventureWorks : プレフィックスとして DF_ を使用 (DF_EmployeeDepartmentHistory_ModifiedDate)
    • DF_<テーブル名>_<列名>
  • WideWorldImporters : プレフィックスとして DF_ を使用 (DF_Sales_BuyingGroups_BuyingGroupID)
    • DF_<スキーマ名>_<テーブル名>_<列名>

外部キー制約

  • AdventureWorks : プレフィックスとして FK_ を使用 (FK_Store_SalesPerson_SalesPersonID)
    • FK_<ベーステーブル名>_<ベーステーブル列名>_<参照先テーブル名>_<参照先テーブル列名>
    • インデックスを作成する場合は、IX_<ベーステーブル名>_<ベーステーブル列名> を作成
  • WideWorldImporters : プレフィックスとして FK_ を使用 (FK_Purchasing_PurchaseOrders_ContactPersonID_Application_People)
    • FK_<ベーステーブルスキーマ名>_<ベーステーブル名>_<ベーステーブル列名>_<参照先テーブルスキーマ名>_<参照先テーブル名>
    • インデックスを作成する場合は、FK_<ベーステーブルスキーマ名>_<ベーステーブル名>_<ベーステーブル列名> を作成

プライマリキー制約

  • AdventureWorks : プレフィックスとして PK_ を使用 (PK_PersonPhone_BusinessEntityID_PhoneNumber_PhoneNumberTypeID)
    • PK_<テーブル名>_<列名>
  • WideWorldImporters : プレフィックスとして PK_ を使用 (PK_Sales_Invoices)
    • PK_<スキーマ名>_<テーブル名>

クラスター化インデックス

  • AdventureWorks : PK = クラスター化インデックスとなっている
  • WideWorldImporters : プレフィックスとして CX を使用(CX_Sales_CustomerTransactions)
    • CX_<スキーマ名>_<テーブル名>

非クラスター化インデックス

  • AdventureWorks : プレフィックスとして IX_ を使用 (IX_EmployeeDepartmentHistory_DepartmentID)
    • IX_<テーブル名>_<列名>
  • WideWorldImporters : プレフィックスとして IX_ を使用 (IX_Application_People_FullName)
    • IX_<スキーマ名>_<テーブル名>_<列名>

ユニークキー制約 (一意インデックス)

  • AdventureWorks : プレフィックスとして UQ_ を使用 (UQ__Document__F73921F7C5112C2E)
    • UQ_テーブル名_>
  • WideWorldImporters : プレフィックスとして UQ_ を使用 (UQ_Sales_CustomerCategories_CustomerCategoryName)
    • UQ_<スキーマ名>_<テーブル名>_<列名>

シーケンス

  • AdventureWorks : 未使用
  • WideWorldImporters : プレフィックスは使用しない (StateProvinceID)

参考資料

予約済みキーワード (Transact-SQL)
Database Naming Conventions by Microsoft?
SQL Server Name Convention and T-SQL Programming Style

2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?