ตารางบันทึกควรได้รับช่อง id หรือคีย์หลักหรือไม่


12

ฉันมีตารางบันทึกที่รวบรวมการประทับวันที่และเวลาเมื่อไฟล์บางไฟล์ถูกส่งออกไปยังระบบอื่น

ตาราง exportLog ปัจจุบันมีสามฟิลด์:

id                (primary key)
messageId         (int)
exportedDateTime  (datetime)

จากการตรวจสอบนี้ฉันพบว่าidฟิลด์นี้ไม่มีจุดประสงค์เนื่องจากไม่มีการเชื่อมต่อกับตารางนี้ สิ่งเดียวที่ทำงานในตารางนี้คือการแทรกของชุดงานที่ประมวลผลข้อความและแทรกลงในตารางบันทึกนี้

ฉันควรลบidฟิลด์หรือไม่

ฉันควรจะมีคีย์หลักในการอย่างใดอย่างหนึ่งmessageIdหรือexportedDateTimeหรือทั้งสอง?


2
DBMS นี้เป็นแบบใด
ypercubeᵀᴹ

คำตอบ:


10

ฉันควรลบฟิลด์ id หรือไม่

ฉันอยากจะแนะนำให้รักษามันไว้

คุณอาจไม่ต้องการฟิลด์ในขณะนี้แต่ในอนาคตสามารถช่วยคุณได้จริงๆ - จะเป็นอย่างไรถ้าคุณต้องการจัดเก็บรายละเอียดของไฟล์สำหรับแต่ละรายการบันทึก

ฉันไม่ทราบว่าตารางนี้จะได้รับขนาดใหญ่เพียงใดและรวดเร็วแค่ไหน แต่การเพิ่มคอลัมน์ในตารางขนาดใหญ่มักเป็นการดำเนินการที่มีราคาแพง หากตารางมีขนาดค่อนข้างเล็กก็ไม่ใช่เรื่องใหญ่ที่จะต้องคำนึงถึงพื้นที่จัดเก็บ IMO, เก็บคอลัมน์และบันทึกอาการปวดหัวที่อาจเกิดขึ้นในภายหลัง

ฉันควรมีคีย์หลักใน messageId หรือ exportDateTime หรือทั้งสองอย่าง

ดูเหมือนว่าmessageIdคนเดียวจะไม่ซ้ำกันในตารางนี้ (แม้ว่าฉันอาจผิด) และการสร้างเอกลักษณ์ในคอลัมน์วันที่ / เวลาเพียงอย่างเดียวอาจทำให้เกิดการซ้ำซ้อนได้ ตัวเลือกเดียวที่เหลือคือคีย์ 2 คอลัมน์ซึ่งไม่น่าสนใจเป็นพิเศษเนื่องจากสถานการณ์ที่ฉันตั้งไว้ด้านบน


โดยพื้นฐานแล้วประเด็นของคำตอบนี้คือการทำให้คอลัมน์ไม่ใช่เรื่องใหญ่ (ฉันสมมติว่า) แต่การต้องการในภายหลังอาจเป็นเรื่องใหญ่และ / หรือต้องการงานพิเศษเพื่อนำกลับมาใช้


6
  • หากคุณไม่ได้เข้าร่วมในตารางนี้ไม่มีการอัปเดตและไม่มีการลบดังนั้นคุณไม่จำเป็นต้องใช้กุญแจเลย

  • หากไม่ใช่กรณีนี้และmessageIdไม่ซ้ำกันคุณสามารถทำให้เป็นคีย์หลัก

  • ถ้ามันไม่ซ้ำกัน แต่(messageId, exportedDateTime)เป็นทำให้คีย์หลักประกอบนี้

  • หากแม้กระทั่ง(messageId, exportedDateTime)ชุดค่าผสมสามารถให้ข้อมูลซ้ำและอัปเดตและการลบก็อาจจำเป็น (พูดเพื่อลบแถวที่แทรกโดยไม่ตั้งใจ) คุณควรออกจากidฟิลด์ตามที่ควรจะเป็น


0

คีย์หลักจะไม่เจ็บ ... หากคุณพิจารณาถึงวัตถุประสงค์ของบันทึกการติดตาม / การตรวจสอบอาจใช้ (สอบถาม) ในอนาคตเพื่อแก้ไขปัญหาหรือกู้คืนข้อมูล ฯลฯ และมีแนวโน้มที่จะเข้าร่วมกับคนอื่น ๆ ตารางที่ไม่ใช่บันทึก / การตรวจสอบที่มีอยู่เพื่อดำเนินงานประเภทนั้น

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.