Pro Tips Entity Framework With Microsoft SQL Server Database (Part 1)

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 TypeExample
TableCompany
ColumnName
Parameter@Separator
Variable@Result
Table 1.1 Standard Codes Table, View, Column, Relationships, Parameter dan Variable

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 TypeExample
FunctionSplit_String
Stored Proceduresp_clear_history
RelationshipsFK_Area_Company
IndexIX_Area
Table 1.2 Standard Codes Function dan Stored Procedure

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, String dan lain-lain.

Tabel Company

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
ProfilePicturevarchar(200)Yes
Table 1.3 Contoh penamaan kolom yang benar

Tabel Area

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
Addressvarchar(500)Yes
FK, IXCompanyCodeintNo
Table 1.4 Contoh penamaan kolom yang benar pada tabel relasi

Tabel Company

KeyColumn NameData TypeAllow Nulls
PKCompanyCodeintNo
CompanyNamevarchar(50)No
CompanyProfilePicturevarchar(200)Yes
Table 1.5 Contoh penamaan kolom yang salah

C. Standard Data Type

SQL Server Data TypeC# Data TypeRemarks
varcharstringUntuk perbedaan antara nvarchar dan varchar dapat membaca pembahasan di sini
smallintshort
intint
bigintlong
floatdouble
moneydecimal
dateDateTimeDigunakan untuk menyimpan waktu yang tidak memiliki jam
datetimeoffsetDateTimeOffsetDigunakan untuk menyimpan waktu yang memiliki jam, dengan demikian waktu yang tampil pada UI dapat sesuai dengan offset hour dari masing- masing wilayah
timeTimeSpan
bitbool
Table 1.6 Pemetaan tipe data antara SQL server dan C#

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

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
ProfilePicturevarchar(200)Yes

Tabel Area

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
Addressvarchar(500)Yes
FK, IXCompanyCodeintNo

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

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
ProfilePicturevarchar(200)Yes

Tabel Area

KeyColumn NameData TypeAllow Nulls
PKCodeintNo
Namevarchar(50)No
Addressvarchar(500)Yes
FK, IXCompanyCodeintYes

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

KeyColumn NameData TypeAllow Nulls
PKIdintNo
TagNumbervarchar(100)No
Descriptionvarchar(100)No
FK, IXCompanyCodeintNo

Tabel Equipment Image

KeyColumn NameData TypeAllow Nulls
PK, FKIdintNo
PKImageNamevarchar(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

KeyColumn NameData TypeAllow Nulls
PKIdintNo
Namevarchar(100)No
Descriptionvarchar(100)Yes
FK, IXParentIdintYes

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

KeyColumn NameData TypeAllow Nulls
PKIdintNo
Namevarchar(20)No
Emailvarchar(100)No
FK, IXCompanyCodeintNo

Tabel UserProfile

KeyColumn NameData TypeAllow Nulls
PK, FKIdintNo
FullNamevarchar(100)No
ImageNamevarchar(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

KeyColumn NameData TypeAllow Nulls
PKIdintNo
Namevarchar(50)No
Emailvarchar(100)No
FK, IXCompanyCodeintNo

Tabel Role

KeyColumn NameData TypeAllow Nulls
PKIdintNo
Namevarchar(20)No
Descriptionvarchar(500)Yes

Tabel UserRole

KeyColumn NameData TypeAllow Nulls
PK, FKUserIdintNo
PK, FKRoleIdintNo

Topaz Moderato has written 14 articles

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>