มีเครื่องมือในการตรวจสอบว่าฐานข้อมูลของฉันเป็นมาตรฐานในรูปแบบปกติที่สามหรือไม่?


20

ฉันเรียนรู้เกี่ยวกับการทำให้เป็นมาตรฐานเมื่อเร็ว ๆ นี้และเข้าใจว่าการใช้สคีมาใหม่นั้นมีความสำคัญเพียงใด

ฉันจะตรวจสอบว่าฐานข้อมูลของฉันเป็นไปตาม 2NF หรือ 3NF ได้หรือไม่?

การตรวจสอบด้วยตนเองเป็นตัวเลือกที่แน่นอน แต่ฉันกำลังมองหาเครื่องมืออัตโนมัติที่นี่

ฉันไม่ได้กำลังมองหาเครื่องมือจุดและคลิกสิ่งที่มากกว่านั้นจะเน้นการปรับให้เหมาะสมที่สุดเพื่อให้เป็นไปตามตาราง 3NF ฉันเดาว่าอาจใช้สถิติจากข้อมูลตัวอย่างที่ดีและ / หรือการวิเคราะห์ความหมายของชื่อคอลัมน์


1
ฉันหวังว่าเครื่องมือดังกล่าวจะไม่มีอยู่จริง 2NF / 3NF ไม่จำเป็นต้องบังคับใช้ การออกแบบ schema / model มักจะต้องคำนึงถึงการปฏิบัติและการพิจารณาประสิทธิภาพซึ่งมักจะทำให้ xNF อยู่นอกหน้าต่าง
Phil window

2
มันหมายความว่าการปรับสภาพไม่ได้ใช้จริงหรือไม่? ฉันวางแผนที่จะใช้เป็นจุดเริ่มต้นและจะพิจารณา denormalizing เมื่อประสิทธิภาพการทำงานช้าลง
ack__

3
การออกแบบสคีมาเป็นศิลปะมากกว่าวิทยาศาสตร์ แน่นอนว่ามีกฎพื้นฐานที่ต้องปฏิบัติตาม แต่เมื่อคุณทำพอคุณจะเริ่มรู้สึกดีว่าอะไรทำงานได้ดีและอะไรที่ไม่ดี ฝีมือ
datagod

ฉันไม่เห็นด้วยกับฟิล การทำให้เป็นมาตรฐานเป็นบางครั้งวิธีที่จะไป บางครั้งสคีตาร์ดาวจะดีกว่า ขึ้นอยู่กับสิ่งที่คุณกำลังทำ คุณต้องใช้โต๊ะจำนวนมากก่อนที่ระบบอัตโนมัติจะคุ้มค่า
วอลเตอร์ Mitty

คำตอบ:


24

การทำให้เป็นมาตรฐานถูกนำมาใช้จริงในโลกแห่งความเป็นจริง ... และหวังว่าคุณจะรู้ว่า 3NF เป็นเพียงหนึ่งในสามของ ... ตอนนี้ 8 คืออะไร? แต่ 3NF ควรเป็นเป้าหมายที่ง่าย

อย่างไรก็ตาม ... ฉันอยากจะบอกว่าไม่มีเครื่องมือเช่นนั้น

การทำให้เป็นมาตรฐานในทางเทคนิคเป็นคุณลักษณะของแต่ละตาราง ภายในฐานข้อมูลที่กำหนดตารางที่ต่างกันอาจมีระดับการทำให้เป็นมาตรฐานที่แตกต่างกัน

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

การทำให้เป็นมาตรฐานนั้นเกี่ยวข้องกับการแสดงข้อเท็จจริงอย่างแม่นยำและมีประสิทธิภาพในตารางรวมถึงความสามารถในการออกแบบของตารางเพื่อป้องกันรูปแบบข้อมูลที่คลุมเครือและซ้ำซ้อน

ดังนั้นต้องมีความเข้าใจในข้อเท็จจริงที่แท้จริง ... ซึ่งอยู่นอกขอบเขตของเครื่องมืออัตโนมัติ

Q: Is a table with { student, subject, instructor } in 3NF?
A: What are students, subjects and instructors?

ในโลกที่ผู้สอนทุกคนสอนทุกวิชาและนักเรียนแต่ละคนสามารถรวมกันได้ แต่ไม่เกินหนึ่งวิชาในแต่ละวิชาจากผู้สอนแต่ละคนตารางนี้อาจกล่าวได้ว่าเป็น 3NF ในโลกแห่งความเป็นจริงการอ้างสิทธิ์ 3NF สำหรับตารางนี้นั้นไร้สาระ

เพื่อให้เข้าใจว่าไม่ได้อยู่ใน 3NF จำเป็นต้องมีความเข้าใจในลักษณะของข้อเท็จจริงที่เป็นตัวแทน ในความเป็นจริงของเราตารางนี้จะไม่เป็น 3NF เนื่องจาก (ด้วยเหตุผลอื่น ๆ ) วิชาและผู้สอนมีความสัมพันธ์กันในรูปแบบที่ไม่มีอะไรเกี่ยวข้องกับนักเรียน หากเรามีหลักสูตรที่อาจารย์ผู้สอนสอนวิชาที่เก็บไว้ที่อื่นในฐานข้อมูลของเราทำไมเราจะคัดลอกค่าทั้งสองที่นี่แทนที่จะเป็นกุญแจต่างประเทศจากตารางอื่น ๆ ที่ระบุว่านักเรียนได้ลงทะเบียนสำหรับหลักสูตรหรือไม่ หากผู้สอนถูกแทนที่เราจะต้องเปลี่ยนหลายระเบียนในหลาย ๆ ที่

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

แม้ว่าฉันจะไม่เห็นทุกสิ่งที่เขาเขียนแบบตาต่อตาฉันก็จะแนะนำหนังสือของ Chris Date, การออกแบบฐานข้อมูลและทฤษฎีเชิงสัมพันธ์: ฟอร์มปกติและ All That Jazzซึ่งมีรายละเอียดที่น่าตื่นเต้นเกี่ยวกับทฤษฎีพื้นฐานของโมเดลเชิงสัมพันธ์


2
ขอบคุณสำหรับคำตอบโดยละเอียดนี้ อย่างไรก็ตามตามตัวอย่างของคุณควรเป็นไปได้สำหรับเครื่องมือที่วิเคราะห์ข้อมูลตัวอย่างเพื่อตรวจสอบว่าค่า "ผู้สอน" ซ้ำแล้วซ้ำอีกจำนวนมากและปรากฏในตารางอื่นดังนั้นจึงแนะนำว่าอาจเป็นตัวเลือกสำหรับคีย์ต่างประเทศหรือการเปลี่ยนแปลงอื่น ๆ จะทำให้ตารางนี้สอดคล้องกับ 3nf หรือฉันไม่มีอะไร
ack__

2
จริง แต่คำสำคัญยังคงเป็น "แนะนำ" เครื่องมือสามารถแนะนำการเปลี่ยนแปลงโครงสร้างโดยการค้นหาความซ้ำซ้อนที่ชัดเจน แต่ฉันยังคงยืนยันว่าการซ้ำซ้อนที่แท้จริงและลักษณะที่สัมพันธ์กันโดยบังเอิญจะเป็นเรื่องยากสำหรับเครื่องมือที่จะแยกแยะความแตกต่างระหว่างนี้ ต้องมีความรู้เกี่ยวกับธรรมชาติของข้อมูลจริง
Michael - sqlbot

@ack__: อยู่ในรูปแบบปกติที่ 3 หรือไม่เป็นทรัพย์สินของความสัมพันธ์ที่ไม่ได้เป็นคู่หรือชุดของความสัมพันธ์ ดังนั้นฉันไม่สามารถเห็นได้ว่าการสร้างความสัมพันธ์กับคีย์ต่างประเทศนั้นเกี่ยวข้องกับรูปแบบที่ 3
miracle173

ฉันคิดว่าปัญหาที่ใหญ่กว่าคือการพิจารณาการขึ้นต่อกันของฟังก์ชั่นหลายคอลัมน์นั้นเป็นปัญหา หากค่าอาจเหมือนกันและยังเป็นตัวแทนของหน่วยงานที่แตกต่างกัน (เช่นที่เกี่ยวข้องกับคีย์ผสม) พิจารณาตาราง: (address_text, เมือง, state_province, mail_code, ประเทศ) ตอนนี้ไม่ได้ทำให้เป็นมาตรฐาน (เมือง, state_province) -> (ประเทศ) ดังนั้นในการทำให้เป็นมาตรฐานโดยสมบูรณ์เราจะต้องแยกสิ่งนี้ออกเป็นอย่างน้อยสามตารางอาจจะสี่ (การจัดการ mail_code!) แต่คีย์ผสมทำให้ปัญหานี้ตรวจจับได้ทันที ยังคอมพ์ กุญแจคือกุญแจสำคัญในความคิดของ nf ดังนั้นอย่าเพิกเฉย!
Chris Travers

ใครบางคนสามารถอธิบายได้ว่าทำไม "ในโลกที่นักเรียนสามารถเรียนวิชาเดียวในวิชาเดียวและอาจารย์ทุกคนสอนวิชาทั้งหมดตารางนี้อาจกล่าวได้ว่าเป็น 3NF" ซึ่งดูเหมือนว่าจะสร้างนักเรียน -> วิชาและไม่มีอะไรเพิ่มเติม สัมผัสถึงความสำคัญสำหรับตารางนี้แล้ว (นักเรียนอาจารย์) จะไม่ทำลาย 3NF หรือไม่ ครูทุกคนสอนทุกวิชาอะไรช่วยเราด้วย
Drew Verlee

5

ส่วนหนึ่งของการใช้วิธีการอย่างเป็นทางการในการพัฒนาทฤษฎีเชิงสัมพันธ์คือการพัฒนาวิธีการที่สามารถเป็นไปโดยอัตโนมัติ ฉันค่อนข้างมั่นใจว่า CJ Date ออกมาแล้วและบอกว่าในบทนำสู่ระบบฐานข้อมูลของเขา

เครื่องมือของ CASE หลายตัวที่เปิดตัวในปลายปี 1980 หรือต้นปี 1990 สามารถรับ schema 5NF ได้จากการวิเคราะห์ไดอะแกรม ER หรือการวิเคราะห์ทางสถิติของข้อมูลตัวอย่าง

Visio Enterprise Architect (ฉันคิดว่า) เป็นเครื่องมือที่ค่อนข้างใหม่ในสายเหล่านั้น


ดี ฉันกำลังมองหาทั้งสองวิธีในการวิเคราะห์ schema (แผนภาพไดอะแกรมและการวิเคราะห์ข้อมูลตัวอย่าง) คุณรู้จักซอฟต์แวร์ล่าสุดอื่น ๆ นอกเหนือจาก Visio หรือไม่? ฉันยังไม่มีใบอนุญาต (ยัง)
ack__

1
แต่ไดอะแกรม ER ของคุณนั้นเป็นไดอะแกรมโมเดลวัตถุ นั่นไม่ใช่สิ่งเดียวกันกับการใช้ฐานข้อมูลที่มีอยู่และพิจารณาว่าเป็นมาตรฐานจากฐานข้อมูลหรือไม่
Chris Travers

2
การวิเคราะห์ตารางด้วยข้อมูลตัวอย่างและคำแนะนำสำหรับการทำให้เป็นมาตรฐานเป็นคุณลักษณะของ Access และในเวอร์ชันก่อนหน้าถ้าฉันจำได้ดี
ypercubeᵀᴹ

@Chris: ใช่ฉันหมายถึงแผนภาพ ER สำหรับการวิเคราะห์ความหมายเท่านั้น
ack__

@ypercube: ขอบคุณสำหรับเคล็ดลับฉันจะดูที่การเข้าถึง
ack__


2

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


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

1
อย่างไร? การทำให้เป็นบรรทัดฐานถูกกำหนดบนการพึ่งพาการเข้าร่วมและการพึ่งพาการทำงาน ฟังก์ชันการพึ่งพานั้นถูกกำหนดโดยง่ายว่า: สำหรับทุกค่าที่เป็นไปได้ของ superkey มีค่าหนึ่งค่าในการพึ่งพาการทำงาน คุณไม่สามารถไปที่นั่นโดยอัตโนมัติการตรวจสอบข้อมูลเพราะเพียงเพราะคุณมีสำหรับชุดปัจจุบันของคุณสิ่งที่ดูเหมือนจะพึ่งพาการทำงานที่ไม่ได้หมายความว่าคีย์ใหม่จะสอดคล้อง มันเป็นเหมือนการแบ่งความสัมพันธ์แบบเก่ากับการแบ่งสาเหตุ คุณไม่สามารถชักนำให้พึ่งพาการทำงานได้โดยการสังเกตสิ่งที่อยู่ในฐานข้อมูล
Chris Travers

2
อย่างน้อยเครื่องมือสามารถแนะนำว่าความสัมพันธ์อาจมีอยู่ หากคุณภาพและขนาดของตัวอย่างข้อมูลมีขนาดใหญ่เพียงพอความแม่นยำของการเดาดังกล่าวจะสูงพอสำหรับการใช้งานจริง
miracle173

อาจจะ. แต่ลองมาเป็นตัวอย่างของจริงซึ่งเป็นเรื่องการออกแบบเชิงสัมพันธ์ที่ดูน่ากลัว: ที่อยู่ ที่อยู่ทางไปรษณีย์ควรทำอะไรให้เป็นมาตรฐาน? ควรแนะนำตารางกี่ตาราง โดยความเข้าใจของฉันเกี่ยวกับ 3NF คุณต้องมีตารางสำหรับประเทศรัฐ / จังหวัดและเมืองต่างๆ ฉันไม่ทราบว่ารหัสไปรษณีย์ / รายละเอียดของเมืองมีเหตุผล แต่อาจเป็นไปได้ แต่คุณจะวิเคราะห์ข้อมูลที่มีอยู่และกำหนดว่า (เมืองรัฐ) -> ประเทศได้อย่างไร คุณจะทราบได้อย่างไรว่า / ไม่รหัสไปรษณีย์ทั่วโลกเกี่ยวข้องกับโครงสร้างเหล่านี้หรือไม่
Chris Travers
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.