Microsoft SQL Server
A. Standard Codes
Standard codes Rekadia untuk penulisan Table, View, Column, Parameter dan Variable adalah menggunakan bahasa Inggris dan menggunakan casing PascalCase (UpperCamelCase). Berikut contoh penulisan dari masing-masing:
| Object Type | Example |
|---|---|
| Table | Company |
| Column | Name |
| Parameter | @Separator |
| Variable | @Result |
Terdapat perbedaan standard codes penulisan pada Function, Stored Procedure, Relationships dan Index. Untuk penulisan Function dan Relationships dan Index menggunakan Pascal_Case_With_Underscore. Sedangkan pada Stored Procedure menggunakan snake_case. Untuk Relationships diawali dengan FK_ dan untuk Index menggunakan IX_. Sedangkan untuk Stored Procedure diawali dengan sp_. Berikut contoh penulisan dari masing-masing:
| Object Type | Example |
|---|---|
| Function | Split_String |
| Stored Procedure | sp_clear_history |
| Relationships | FK_Area_Company |
| Index | IX_Area |
B. Standard Column Name
Standar Rekadia untuk penanamaan Column pada Table Microsoft SQL Server adalah sebagai berikut:
- Pada penamaan tidak perlu penegasan bahwa kolom ini milik tabel apa. Untuk lebih jelas dapat di lihat pada Table 1.3 sampai dengan Table 1.5.
- Hindari penggunaan nama kolom yang merupakan tipe objek dari bahasa pemrograman C#, contoh:
DateTime,TimeSpan,Stringdan lain-lain.
Tabel Company
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| ProfilePicture | varchar(200) | Yes |
Tabel Area
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| Address | varchar(500) | Yes | |
| FK, IX | CompanyCode | int | No |
Tabel Company
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | CompanyCode | int | No |
| CompanyName | varchar(50) | No | |
| CompanyProfilePicture | varchar(200) | Yes |
C. Standard Data Type
| SQL Server Data Type | C# Data Type | Remarks |
|---|---|---|
varchar | string | Untuk perbedaan antara nvarchar dan varchar dapat membaca pembahasan di sini |
smallint | short | |
int | int | |
bigint | long | |
float | double | |
money | decimal | |
date | DateTime | Digunakan untuk menyimpan waktu yang tidak memiliki jam |
datetimeoffset | DateTimeOffset | Digunakan untuk menyimpan waktu yang memiliki jam, dengan demikian waktu yang tampil pada UI dapat sesuai dengan offset hour dari masing- masing wilayah |
time | TimeSpan | |
bit | bool |
D. Format Codes
Penulisan keywords SQL dan Function pada syntax Microsoft SQL Server adalah menggunakan UPPERCASE. Berikut contoh penulisannya:
SELECT
[Code],
dbo.STRING_TRIM([Name]) AS [Name]
FROM
dbo.[Area]
WHERE
[Deleted] = 0 AND [CompanyCode] = 1001;
SELECT
COUNT(*) AS [Total]
FROM
dbo.[Area]
WHERE
[Deleted] = 0;
Penulisan Stored Procedure pada syntax Microsoft SQL Server adalah menggunakan lowercase. Berikut contoh penulisannya:
-- with parameter name EXEC sp_reset_identity @TableName = 'TaskHistory', @Value = 82000000; -- without parameter name EXEC sp_reset_identity 'TaskHistory', 82000000;
Penulisan Data Type pada syntax Microsoft SQL Server adalah menggunakan lowercase. Berikut contoh penulisannya:
-- variable table
DECLARE @Table table (
[Id] int identity(1,1),
[Value] varchar(MAX)
);
-- temp table
CREATE table #Table (
[Id] int identity(1,1),
[Value] varchar(MAX)
);
Contoh penulisan Function dan Stored Procedure ada pada artikel berikut ini.
E. Structure Table
One to Many (1 to *)
Syarat untuk relasi ini adalah terdapat constraints antara dua tabel dimana terdapat foreign key pada tabel relasi dan merupakan primary key pada tabel utama. Perhatikan contoh berikut:
Tabel Company
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| ProfilePicture | varchar(200) | Yes |
Tabel Area
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| Address | varchar(500) | Yes | |
| FK, IX | CompanyCode | int | No |
Pada contoh di atas Table Company sebagai one dan Tabel Area sebagai many.
Zero..One to Many (0..1 to *)
Syarat pada relasi ini hampir sama dengan relasi One to Many (1 to *), perbedaanya terdapat pada foreign key yang bersifat nullable. Perhatikan contoh berikut.
Tabel Company
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| ProfilePicture | varchar(200) | Yes |
Tabel Area
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Code | int | No |
| Name | varchar(50) | No | |
| Address | varchar(500) | Yes | |
| FK, IX | CompanyCode | int | Yes |
One to Many Base on Parent (1 to *)
Syarat untuk relasi ini adalah terdapat constraints antara dua tabel dimana terdapat foreign key pada tabel relasi dan merupakan primary key pada tabel utama. Selain syarat tersebut, foreign key pada tabel relasi harus menjadi primary key dan terdapat satu kolom lagi yang menjadi primary key. Perhatikan contoh berikut:
Tabel Equipment
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Id | int | No |
| TagNumber | varchar(100) | No | |
| Description | varchar(100) | No | |
| FK, IX | CompanyCode | int | No |
Tabel Equipment Image
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK, FK | Id | int | No |
| PK | ImageName | varchar(200) | No |
Struktur tabel seperti ini biasa digunakan untuk form yang sekaligus menyimpan atau mengubah data tabel utama dan tabel relasi dalam satu proses yang sama, berikut contoh form pada UI aplikasi:

Kelebihan struktur tabel ini adalah dapat mengontrol secara penuh proses CRUD melalui parent object pada Entity Framework terutama pada proses delete. Perhatikan contoh code berikut:
//EquipmentFormStub.cs
public void MapDbObject(Equipment dbObject)
{
// proses mapping pada FormStub
//...
//...
// keuntungan yang didapatkan jika menerapkan relasi 1 to * base on parent
dbObject.EquipmentImages.clear();
//...
//...
}
//EquipmentController.cs
public Task<ActionResult> Edit(EquipmentFormStub model)
{
// proses edit pada Controller
List<EquipmentImages> images = await RepoEquipmentImage.GetAllAsync(m => m.EquipmentId == model.Id);
// jika tidak dimenerapkan relasi 1 to * base on parent
RepoEquipmentImage.DeleteAll(images);
//...
//...
}
Zero..One to Many Self Relation (0..1 to *)
Secara konsep relasi ini sama dengan relasi Zero..One to Many (0..1 to *), perbedaanya contraints mengarah pada tabel itu sendiri. Perhatikan contoh berikut.
Tabel Role
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Id | int | No |
| Name | varchar(100) | No | |
| Description | varchar(100) | Yes | |
| FK, IX | ParentId | int | Yes |
One to One (1 to 1)
Syarat untuk relasi ini adalah terdapat constraints antara dua tabel dimana terdapat foreign key pada tabel relasi dan merupakan primary key pada tabel utama. Selain syarat tersebut, foreign key pada tabel relasi harus menjadi primary key. Perhatikan contoh berikut:
Tabel User
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Id | int | No |
| Name | varchar(20) | No | |
varchar(100) | No | ||
| FK, IX | CompanyCode | int | No |
Tabel UserProfile
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK, FK | Id | int | No |
| FullName | varchar(100) | No | |
| ImageName | varchar(200) | Yes |
Many to Many (* to *)
Syarat untuk relasi ini adalah terdapat constraints antara tiga tabel dimana terdapat foreign key pada tabel penghubung relasi dan merupakan primary key pada tabel utama. Perhatikan contoh berikut:
Tabel User
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Id | int | No |
| Name | varchar(50) | No | |
varchar(100) | No | ||
| FK, IX | CompanyCode | int | No |
Tabel Role
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK | Id | int | No |
| Name | varchar(20) | No | |
| Description | varchar(500) | Yes |
Tabel UserRole
| Key | Column Name | Data Type | Allow Nulls |
|---|---|---|---|
| PK, FK | UserId | int | No |
| PK, FK | RoleId | int | No |