การทำให้มาตรฐานตารางการทำงานของคุณเป็นปกติตามที่แนะนำโดย Transact Charlie เป็นความคิดที่ดีและจะช่วยประหยัดอาการปวดหัวและปัญหาต่าง ๆ ในช่วงเวลา - แต่มีสิ่งต่าง ๆ เช่นตารางอินเทอร์เฟซที่รองรับการรวมเข้ากับระบบภายนอกและการรายงานตารางการประมวลผล; และประเภทที่ของตารางควรไม่จำเป็นต้องปกติ - ในความเป็นจริงมากมักจะเป็นมากสะดวกสบายมากขึ้นและ performant สำหรับพวกเขาจะไม่เป็น
ในกรณีนี้ฉันคิดว่าข้อเสนอของ Transact Charlie สำหรับตารางปฏิบัติการของคุณนั้นดี
แต่ฉันจะเพิ่มดัชนี (ไม่จำเป็นต้องไม่ซ้ำกัน) ไปยัง CompetitorName ในตารางคู่แข่งเพื่อสนับสนุนการรวมที่มีประสิทธิภาพบน CompetitorName เพื่อวัตถุประสงค์ในการรวม (โหลดข้อมูลจากแหล่งภายนอก) และฉันจะใส่ตารางอินเทอร์เฟซลงใน Mix: CompetitionResults
CompetitionResults ควรมีข้อมูลใด ๆ ที่ผลการแข่งขันของคุณมีอยู่ จุดของตารางอินเทอร์เฟซเช่นนี้คือทำให้มันง่ายและรวดเร็วที่สุดในการตัดและโหลดใหม่จากแผ่นงาน Excel หรือไฟล์ CSV หรือรูปแบบใดก็ตามที่คุณมีข้อมูลนั้น
ไม่ควรถือว่าตารางส่วนต่อประสานนั้นเป็นส่วนหนึ่งของชุดปฏิบัติการตารางปกติจากนั้นคุณสามารถเข้าร่วมกับ RaceResults ตามที่ Richard แนะนำเพื่อแทรกระเบียนลงในคู่แข่งที่ไม่มีอยู่แล้วและอัปเดตสิ่งที่ทำ (เช่นถ้าคุณมีข้อมูลเพิ่มเติมเกี่ยวกับคู่แข่งเช่นหมายเลขโทรศัพท์หรือที่อยู่อีเมล)
สิ่งหนึ่งที่ฉันจะทราบ - ในความเป็นจริงชื่อคู่แข่งดูเหมือนว่าสำหรับฉันคือ อย่างมากไม่น่าจะไม่ซ้ำกันในข้อมูลของคุณ ในคู่แข่ง 200,000 คนคุณอาจมี David Smith 2 คนขึ้นไป ดังนั้นฉันขอแนะนำให้คุณรวบรวมข้อมูลเพิ่มเติมจากคู่แข่งเช่นหมายเลขโทรศัพท์หรือที่อยู่อีเมลหรือบางสิ่งที่มีแนวโน้มว่าจะไม่ซ้ำกัน
ตารางการปฏิบัติงานของคุณคู่แข่งควรมีหนึ่งคอลัมน์สำหรับแต่ละรายการข้อมูลที่มีส่วนช่วยในการรวมคีย์ธรรมชาติ เช่นควรมีหนึ่งคอลัมน์สำหรับที่อยู่อีเมลหลัก แต่ตารางส่วนต่อประสานควรมีช่องสำหรับเก่าและใหม่สำหรับที่อยู่อีเมลหลักเพื่อให้สามารถใช้ค่าเก่าเพื่อค้นหาบันทึกในคู่แข่งและอัปเดตส่วนนั้นให้เป็นค่าใหม่
ดังนั้นการแข่งขันผลการแข่งขันควรมีบางฟิลด์ "เก่า" และ "ใหม่" - oldEmail, newEmail, oldPhone, newPhone ฯลฯ วิธีที่คุณสามารถสร้างคีย์ผสมในคู่แข่งจากคู่แข่งชื่ออีเมลและโทรศัพท์
จากนั้นเมื่อคุณมีผลลัพธ์การแข่งขันคุณสามารถตัดทอนและโหลดตาราง CompetitionResults ของคุณใหม่จากแผ่นงาน excel หรืออะไรก็ตามที่คุณมีและเรียกใช้การแทรกที่มีประสิทธิภาพเพียงครั้งเดียวเพื่อแทรกคู่แข่งใหม่ทั้งหมดลงในตารางคู่แข่งและการอัปเดตที่มีประสิทธิภาพ ข้อมูลทั้งหมดเกี่ยวกับคู่แข่งที่มีอยู่จากการแข่งขัน และคุณสามารถแทรกเดี่ยวเพื่อแทรกแถวใหม่ลงในตาราง CompetitionCompetitors สิ่งเหล่านี้สามารถทำได้ในกระบวนงานที่เก็บไว้ ProcessCompetitionResults ซึ่งสามารถดำเนินการได้หลังจากโหลดตาราง CompetitionResults
นั่นเป็นคำอธิบายพื้นฐานของสิ่งที่ฉันได้เห็นในโลกแห่งความเป็นจริงที่มี Oracle Applications, SAP, PeopleSoft และรายการซักอบรีดของชุดซอฟต์แวร์องค์กรอื่น ๆ
หนึ่งความคิดเห็นล่าสุดที่ฉันทำคือสิ่งที่ฉันเคยทำมาก่อนหน้านี้ใน SO: หากคุณสร้างคีย์ต่างประเทศที่รับประกันว่าคู่แข่งมีอยู่ในตารางคู่แข่งก่อนที่คุณจะสามารถเพิ่มแถวกับคู่แข่งนั้นในการแข่งขันคู่แข่งตรวจสอบให้แน่ใจว่า foreign key ถูกตั้งค่าเป็นเรียงซ้อนการปรับปรุงและลบต่างประเทศที่สำคัญมีการตั้งค่าการปรับปรุงน้ำตกและลบ ด้วยวิธีนี้หากคุณต้องการลบคู่แข่งคุณสามารถทำได้และแถวทั้งหมดที่เกี่ยวข้องกับคู่แข่งนั้นจะถูกลบโดยอัตโนมัติ มิฉะนั้นโดยค่าเริ่มต้นรหัสต่างประเทศจะกำหนดให้คุณลบแถวที่เกี่ยวข้องทั้งหมดออกจากตัวแข่งขันของคู่แข่งก่อนที่จะให้คุณลบคู่แข่ง
(บางคนคิดว่ากุญแจต่างประเทศที่ไม่ได้เรียงกันเป็นข้อควรระวังเพื่อความปลอดภัยที่ดี แต่ประสบการณ์ของฉันคือพวกเขาเป็นเพียงความเจ็บปวดที่ซุกซนในก้นที่บ่อยกว่าไม่ใช่เพียงแค่การกำกับดูแลและพวกเขาสร้างงานจำนวนมาก สำหรับ DBA การจัดการกับผู้คนโดยไม่ตั้งใจลบสิ่งต่าง ๆ คือสาเหตุที่คุณมีสิ่งต่าง ๆ เช่นกล่องโต้ตอบ "คุณแน่ใจ" และการสำรองข้อมูลปกติหลายประเภทและแหล่งข้อมูลซ้ำซ้อนมันไกลกันมากที่ต้องการลบคู่แข่งที่มีข้อมูลทั้งหมด ตัวอย่างเช่นสับสนมากกว่าที่จะลบโดยไม่ตั้งใจแล้วไปที่ "โอ้ไม่! ฉันไม่ได้ตั้งใจทำอย่างนั้นและตอนนี้ฉันไม่มีผลการแข่งขันของพวกเขา! Aaaahh!" อย่างหลังนี้เป็นเรื่องธรรมดาพอดังนั้น คุณจำเป็นต้องเตรียมพร้อมสำหรับมัน แต่อดีตนั้นเป็นเรื่องธรรมดามากดังนั้นวิธีที่ง่ายที่สุดและดีที่สุดในการเตรียมตัวสำหรับอดีตคือ imo คือการทำคีย์ต่างประเทศเรียงซ้อนการอัปเดตและลบ)
NVARCHAR(64)
คอลัมน์หลักของคุณ (และ: การจัดกลุ่ม) ที่สำคัญ !! ก่อนอื่น - เป็นปุ่มที่กว้างมาก- สูงสุด 128 ไบต์; และอย่างที่สองคือขนาดตัวแปร - อีกครั้ง: ไม่ดีที่สุด ... นี่เป็นตัวเลือกที่แย่ที่สุดที่คุณมี - การแสดงของคุณจะเป็นนรกและการกระจายตัวของตารางและดัชนีจะอยู่ที่ 99.9% ตลอดเวลา .....