サンプルデータベースでみる SQL Server のオブジェクトのネーミングルール
SQL Server では、Microsoft からいくつかのサンプルデータベースが提供されています。
- SQL samples
- Azure Data SQL Samples Repository
- AdventureWorks Sample Databases
- Wide World Importers sample databases for Microsoft SQL
現在、サンプルとして利用される機会の多いデータベースは「AdventureWorks」「WideWorldImporters」の 2 種類となりますが、これらのデータベースでは、どのようなネーミングルール (命名規則) が使用されているのかを確認してみました。
最新のサンプル DB は WideWorldImporters ですので、こちらの規則のほうが最新なのかもしれませんね。
SQL Server ではポリシーベースの管理を行うことができ、次のドキュメントでは機能を使用して命名規則を設定しています。
- レッスン 2: 名前付け基準ポリシーの作成と適用
ポリシーのサンプルは次のリポジトリでも公開されています。
(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)
参考資料
- v<ビュー名>
- usp<ストアドプロシージャ名>
- ufn<関数名>
- <トリガーの処理対象 (複数ある場合は、idu を順に記載><テーブル名>
- CK_<テーブル名>_<列名>
- CK_<スキーマ名><テーブル名><列名>_<制約の説明>
- DF_<テーブル名>_<列名>
- DF_<スキーマ名><テーブル名><列名>
- FK_<ベーステーブル名><ベーステーブル列名><参照先テーブル名>_<参照先テーブル列名>
- インデックスを作成する場合は、IX_<ベーステーブル名>_<ベーステーブル列名> を作成
- FK_<ベーステーブルスキーマ名><ベーステーブル名><ベーステーブル列名><参照先テーブルスキーマ名><参照先テーブル名>
- インデックスを作成する場合は、FK_<ベーステーブルスキーマ名><ベーステーブル名><ベーステーブル列名> を作成
- PK_<テーブル名>_<列名>
- PK_<スキーマ名>_<テーブル名>
- CX_<スキーマ名>_<テーブル名>
- IX_<テーブル名>_<列名>
- IX_<スキーマ名><テーブル名><列名>
- UQ_テーブル名_<?>
- UQ_<スキーマ名><テーブル名><列名>
予約済みキーワード (Transact-SQL)
Database Naming Conventions by Microsoft?
SQL Server Name Convention and T-SQL Programming Style
Author And Source
この問題について(サンプルデータベースでみる SQL Server のオブジェクトのネーミングルール), 我々は、より多くの情報をここで見つけました https://qiita.com/Masayuki_Ozawa/items/288c18907cfe36e66a86著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .