ฉันมีฐานข้อมูลบางส่วนที่สร้างขึ้นโดยใช้รหัสเอนทิตีกรอบแรก; แอพใช้งานได้และโดยทั่วไปฉันมีความสุขมากกับสิ่งที่ Code First ให้ฉันทำ ฉันเป็นโปรแกรมเมอร์คนแรกและ DBA ที่สองตามความจำเป็น ฉันกำลังอ่านเกี่ยวกับ DataAttributes เพื่ออธิบายเพิ่มเติมใน C # สิ่งที่ฉันต้องการให้ฐานข้อมูลทำ และคำถามของฉันคือฉันจะได้รับโทษอะไรจากการมีnvarchar(max)
เงื่อนไขเหล่านี้ในตารางของฉัน (ดูตัวอย่างด้านล่าง)
มีหลายคอลัมน์ในตารางนี้ ใน C # พวกเขาถูกกำหนดเช่น:
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
public string Name { get; set; }
public string Message { get; set; }
public string Source { get; set; }
public DateTime Generated { get; set; }
public DateTime Written { get; set; }
ฉันคาดว่าจะสอบถามและ / หรือเรียงลำดับตามชื่อ, แหล่งที่มา, สร้างและเขียน ฉันคาดว่าชื่อและแหล่งที่มาจะมีความยาวอักขระ 0-50 หรือไม่เกิน 150 ในบางครั้งฉันคาดว่าตารางนี้จะเริ่มต้นค่อนข้างเล็ก (<100k แถว) แต่จะเติบโตอย่างมีนัยสำคัญเมื่อเวลาผ่านไป (> 1 ม. แถว) ข้อความที่เห็นได้ชัดอาจมีขนาดเล็กหรือใหญ่และอาจไม่ถูกสอบถาม
สิ่งที่ฉันต้องการทราบมีการกำหนดประสิทธิภาพสำหรับคอลัมน์ชื่อและแหล่งที่มาของฉันถูกกำหนดเป็นnvarchar(max)
เมื่อฉันไม่เคยคาดหวังว่าพวกเขาจะมีขนาดใหญ่กว่า 150 อักขระหรือไม่
varchar(max)
ทุกที่จะทำให้การแสดงของคุณเจ็บปวด - อย่าทำอย่างนั้น! ใช้ที่เหมาะสมประเภทข้อมูล - การใช้งานvarchar(max)
เฉพาะถ้าคุณจริงๆต้องมากกว่า 8000 ตัวละคร! (ฉันไม่เคยเห็นชื่อบุคคลหรืออีเมลมานานขนาดนั้น!) - ดูว่าอะไรคือจุดประสงค์ของการใช้ VARCHAR (n) Anymore? สำหรับข้อมูลเพิ่มเติม
[MaxLength]
หรือ[StringLength]
คุณลักษณะ ปัจจัยเชิงลบที่เป็นไปได้เพิ่มเติมของคอลัมน์ที่กว้างเกินไปถูกกล่าวถึงในคำตอบของ @ PaulWhite ที่นี่