ประเภทมีอยู่ด้วยเหตุผลถ้าพวกเขาไม่เพิ่มประโยชน์เราก็จะไม่มีพวกมันและจะไม่ใช้มันและเราก็จะมี "ประเภท" และทุกอย่างก็จะเป็นเช่นนั้น ไม่เพียง แต่สะดวกเท่านั้น แต่ยังเพิ่มความปลอดภัยและประสิทธิภาพ ต่อไปนี้เป็นรายชื่อของเหตุผลที่คุณควรจะยังคงมีอยู่ประเภทในรูปแบบพื้นเมืองของพวกเขาและไม่เป็นสตริง ฉันใช้DateTime
เป็นตัวอย่างส่วนใหญ่ แต่ใช้หลักการเดียวกันกับประเภทดั้งเดิมเช่นจำนวนเต็มทศนิยมทศนิยมไบนารีเป็นต้น
ที่เก็บข้อมูล
ข้อ จำกัด
พิมพ์ข้อ จำกัด
ที่เก็บข้อมูลเกือบทั้งหมดอนุญาตให้ระบุข้อ จำกัด ของข้อมูลซึ่งรวมถึงข้อ จำกัด ประเภท หนึ่งในประโยชน์หลักของการระบุDateTime
อินสแตนซ์คือข้อมูลที่เก็บไว้จะถูก จำกัด ประเภท จะไม่มีทางเป็นไปได้ที่จะป้อนสิ่งอื่นนอกเหนือจากวันที่โดยไม่คำนึงถึงวิธีการแทรกข้อมูลลงในร้านค้า ระบบหลังมีความสำคัญสำหรับระบบที่มีขนาดใหญ่กว่าซึ่งมีหลายกระบวนการที่ทำงานโดยตรงกับที่จัดเก็บ ซึ่งรวมถึงการพยายามเพิ่มวันที่ที่ผิดพลาดเช่น 30 กุมภาพันธ์ (ของปีใดก็ได้) เนื่องจากกุมภาพันธ์สามารถมีเพียง 29 วันในปีอธิกสุรทินและ 28 วันสำหรับปีอธิกสุรทินที่ไม่ใช่
ข้อ จำกัด การตรวจสอบ
นอกจากนี้ยังมีข้อ จำกัด ในการตรวจสอบความถูกต้องซึ่งสามารถนำไปใช้ในแหล่งข้อมูลได้เช่นทำให้แน่ใจว่าวันที่แทรกไม่เกินวันที่ปัจจุบันหรือวันที่เริ่มต้นเกิดขึ้นก่อนวันที่สิ้นสุด
การดำเนินงาน
ที่เก็บข้อมูลส่วนใหญ่ยังมีการใช้งาน / ฟังก์ชั่นเช่นDateAdd
หรือDatePart
ใน MS SQL Server สิ่งนี้ช่วยให้คุณสามารถเริ่มการกรองหรือเลือกข้อมูลที่เฉพาะเจาะจงในขณะที่ข้อมูลยังอยู่ในร้าน (ยังไม่ได้รับไปยังแอปพลิเคชัน)
รูปแบบที่ยอมรับในระดับสากล
ด้วยการใช้เนทีฟชนิดอื่น ๆ นักพัฒนาหรือระบบที่มีการโต้ตอบกับร้านค้าไม่จำเป็นต้องได้รับการแจ้งในรายละเอียดนาทีของวิธีการจัดเก็บประเภทดั้งเดิม นี่ไม่ใช่กรณีที่ประเภทนั้นถูกเก็บไว้เป็นสตริงดังนั้นคุณต้องแน่ใจว่าทุกคนเข้าใจรูปแบบของการDateTime
แทนค่าสตริงนั้น ระบบนี้จะเปราะบางเมื่อจัดการกับข้อมูลที่ครอบคลุมตำแหน่งที่ตั้งภูมิภาคและวัฒนธรรมในแหล่งกำเนิดข้อมูลที่ตั้งทางกายภาพของแอปพลิเคชันและคุณลักษณะของผู้ใช้ปลายทาง / ระบบที่มีปฏิสัมพันธ์กับข้อมูลนั้น ตัวอย่าง: รูปแบบวันที่ในประเทศหนึ่งอาจเป็น MM / dd / yyyy (เช่นในสหรัฐอเมริกา) แต่ในอีกรูปแบบหนึ่งอาจเป็น dd / MM / yyyy การตรวจจับความแตกต่างนั้นแทบจะเป็นไปไม่ได้เลย
ความเร็ว
ความเร็วในการดึงข้อมูลความเร็วในการตรวจสอบความเร็วของการดำเนินงานและประสิทธิภาพในการจัดเก็บล้วนเป็นปัจจัยที่สำคัญเช่นกัน ตัวอย่างความเร็วในการดึงข้อมูล: ที่เก็บข้อมูลอนุญาตให้จัดทำดัชนีในคอลัมน์และดัชนีเหล่านี้สามารถใช้งานได้อย่างมีประสิทธิภาพมากขึ้นหากจัดเก็บประเภทในรูปแบบดั้งเดิม
ใบสมัคร
การเข้าถึงข้อมูล
การดำเนินการแบบสอบถามกับที่จัดเก็บกลายเป็นเรื่องง่ายขึ้นโดยใช้ระบบชนิดเนทีฟเป็นผู้พัฒนาอีกครั้งไม่จำเป็นต้องเดาว่าเป็นรูปแบบการจัดเก็บข้อมูล ผู้ให้บริการแอปพลิเคชันที่เก็บข้อมูลเกือบทั้งหมด ( ตัวอย่าง: ado.net ) จัดเตรียมกลไกสำหรับการสร้างเคียวรีแบบกำหนดพารามิเตอร์ที่เหมาะสมตามชนิดเนทีฟที่ส่งผ่านนี่คือตัวอย่างของการเพิ่มส่วนวันที่ลงในเคียวรี ado.net กับที่เก็บเซิร์ฟเวอร์ sql การทำเช่นเดียวกันกับสตริงจะยุ่งยากและเปราะบาง / เกิดข้อผิดพลาดได้ง่าย
command.Parameters.Add(new SqlParameter("@startDate", SqlDbType.Date) {Value = myDateInstance.Date});
การดำเนินงาน
System.Date
ประเภทพื้นเมืองในรหัสนอกจากนี้ยังจัดให้มีการดำเนินงานมาตรฐานเช่นประเภทสุทธิ โดยปกติการดำเนินการทางคณิตศาสตร์ในลักษณะเช่นการเพิ่มวันที่ค้นหาความแตกต่างระหว่างวันที่ ฯลฯ อีกครั้งนี้เป็นไปไม่ได้ที่จะทำอย่างง่ายดายในประเภทสตริง
เลเยอร์การนำเสนอ
สถานที่เกิดเหตุ
เมื่อชนิดดั้งเดิมถูกแปลงเป็นสตริงในเลเยอร์การนำเสนอ ( ตำแหน่งที่ถูกต้องในสแต็กโปรแกรมที่ต้องทำ ) ในตอนนี้โปรแกรมเมอร์มีตัวเลือกต่าง ๆ เพื่อแสดงอย่างถูกต้องตามบริบทที่แสดง บริบทนี้โดยทั่วไปประกอบด้วยความหมายที่แท้จริงของข้อมูลและสถานที่ของผู้ใช้
ตัวอย่างที่ 1
อินสแตนซ์ของวันที่และเวลาสามารถจัดรูปแบบอัตโนมัติตามสถานที่ของผู้ใช้
DateTime.Now.ToString("D", CultureInfo.GetCultureInfo(userContext.Culture))
ตัวอย่างที่ 2
อินสแตนซ์ทศนิยมอาจแสดงถึงจำนวน (สกุลเงิน) และสถานที่ของผู้ใช้ควรแสดงจำนวนตามการตั้งค่าของพวกเขา แอปพลิเคชัน c # อาจแสดงค่าโดยใช้
amount.ToString("C", CultureInfo.GetCultureInfo(userContext.Culture))
นี่อาจเป็นสิ่งสำคัญเนื่องจากวัฒนธรรมที่แตกต่างแสดงตัวเลขต่างกัน ในช่วงเวลาของสหรัฐอเมริกา (.) และเครื่องหมายจุลภาค (,) มีความหมายย้อนกลับที่แน่นอนเช่นเดียวกับในประเทศเนเธอร์แลนด์
ที่ตั้ง
นี่เป็นDateTime
กรณีที่เฉพาะเจาะจงมาก วันที่และเวลาแสดงให้เห็นถึงการเกิดขึ้นในช่วงเวลาที่เฉพาะเจาะจงในเวลา แต่มักจะต้องมีการถ่ายทอด / นำเสนอให้กับผู้ใช้ขึ้นอยู่กับโซนเวลาของตัวเอง ตัวอย่าง: สามารถแสดงDateTime
อินสแตนซ์สำหรับผู้ใช้ในเขตเวลาตะวันออกในสหรัฐอเมริกา มีหลายวิธีในการทำสิ่งนี้ให้สำเร็จ แต่มันจะเป็นไปไม่ได้เลยถ้าอินสแตนซ์เวลาวันที่จะถูกเก็บไว้ในหน่วยความจำในรูปแบบสตริงหรือในที่เก็บข้อมูลเป็นชนิดสตริง2016-09-21T23:38:21.399Z
9/21/2016 5:21 PM
กฎทั่วไป
กฎทั่วไป 2 สำหรับแอปพลิเคชันจะตามมาเมื่อแปลงประเภทดั้งเดิมใด ๆ เป็นการแทนสตริงจะเป็นดังนี้
- เมื่อยอมรับอินพุตแปลงอินพุตนั้นเป็นชนิดดั้งเดิมที่ถูกต้องให้เร็วที่สุดในสแต็กโปรแกรม (โดยปกติจะอยู่ในชั้นนำเสนอ)
- เมื่อดึงข้อมูลที่จะแสดงให้แปลงข้อมูลนั้นเป็นสตริงแทนให้ช้าที่สุดในสแต็กโปรแกรม (อีกครั้งโดยปกติจะอยู่ในชั้นนำเสนอ)