A-AA+then

สอบถามการออกแบบฐานข้อมูลครับ

1,244
อ. ครับ ผมขอสอบถามแนวคิดในการออกแบบฐานข้อมูลครับ

ผมจะทำระบบฐานข้อมูลเพื่อเก็บเอกสารครับ

เอกสารแบ่งเป็นหมวดหมู่ต่างๆกันไป และก็มีเพิ่มเติมหมวดหมู่ตลอดครับ

ผมออกแบบเป็นแต่ละหมวดหมู่เป็น table แยกกันไป
เช่น ประเทศไทย อยู่ใน table country ใช้ id 101 ในการเรียกใช้
การเมือง อยู่ใน table subject ใช้ id 10101 ในการเรียกใช้
การเมืองระหว่างประเทศ อยู่ใน table section ใช้ id 1010101 ในการเรียกใช้
ความสัมพันธ์ระหว่างไทย - ต่างประเทศ อยู่ใน table category ใช้ id 101010101 ในการเรียกใช้

ในขั้นตอนการเพิ่มเอกสาร ผมก็ใช้โค้ด ตำบล อำเภอ มาแปลง ใส่เข้าไป แล้วแทรก id ̣ต่างๆ ไว้ในเรกคอรด์ของเอกสารนั้นเพื่อใช้อ้างอิงในการเรียกดู หรือค้นหาต่อไปครับ

แล้วผมก็ใช้ treemanu ในการเรียกดู แต่ผมไปได้โค้ดมาแบบที่ผมต้องแก้ไขโค้ดในเว้บเอง ซึ่งทำให้ยากในการเพิ่มเติมหัีวข้อเพิ่มเติมมากๆ

ผมว่ามัน fix มากๆเลยครับ แก้ไขเพิ่มเติมยาก ผมควรเก็บเอกสารที่มีหมวดหมู่หลายหมวดแบบไหนครับที่สะดวกในการอ้างถึง หรือเรียกไปใช้งาน เว็บข่าวหรือแบบหมวดหมู่ wikipedia เค้าแยกการเก็บเป็นแบบไหนครับ 

เลยข้อสอบถามแนวคิด อ.ว่า ควรจะจัดเก็บหรือออกแบบในรุปแบบไหนดี ขอบคุณ อ.อย่างสูงครับ



3 ความคิดเห็น

แนวคิดก็คือ ต้องทำความเข้าใจก่อนเป็นอย่างแรกครับ

ความจำเป็นที่จะต้องจัด id เพื่อให้อ้างถึงได้ง่ายๆ นั้น เป็นอย่างไรก็ขึ้นกับ การนำไปใช้ต่อเป็นหลักครับ

ผมบอกเสมอว่า จัดฐานข้อมูลง่าย ก็เขียนโค้ดง่าย

บ่อยครั้งที่ผม แก้ไขฐานข้อมูลใหม่ ให้มีโครงสร้างเหมาะสมกับการนำไปใช้

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

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

จะเห็นว่ามันก็มีเหตุผลในการเลือกใช้ครับ...

แต่ถ้างานของเราไม่ค่อยเกี่ยวข้องกับลักษณะด้านบน ก้ไม่จำเป็นต้องทำแบบนั้นครับ ก็ใช้วิธีแตกออกเป็นตารางย่อยๆ ตามกลุ่ม และอ้างถึงกันโดย id โดยมี parent_id บ่งบอกถึง id แม่ ก็ได้ครับ ซึ่งถ้าเข้าใจแนวคิดของมัน สามารถทำเป็นแบบ node ย่อยๆ แบบไม่จำกัดสมาชิกก็ได้ครับ (ยกตัวอย่างเช่น การจัดระบบโฟลเดอร์ของ windows เป็นชั้นๆ)

ถึงแม้การใช้ id แบบโค้ด ตำบลอำเภอ จะดูยาก แต่ถ้ามองว่า รหัส 3 ตัวแรกเป็นอะไร 2 ตัวถัดมาเป็นอะไร และ 2 ตัวสุดท้าย ระบุอะไร ผมว่ามันก็ไม่ยากนะครับ แต่ข้อจำกัดที่อาจจะมี คือ ถ้าใช้เลข 2 หลัก จำนวนสูงสุดจะเป็น 99 ซึ่งต้องกะให้เพียงพอกับความต้องการ
1

ขอบคุณ อ. มากครับ

ขอถามเพิ่มเติมอีกนิดนะครับ

คือส่วนมากแล้ว tree menu จะเขียนโค้ดหัวข้อในเว็บ แล้วที่นี้ถ้าผมเพิ่มฟิลด์หมวดย่อยขึ้นมา แล้วจะเขียนโค้ดยังไงให้มันดึงฟิลด์นั้นมาเพิ่มในโค้ดเว็บครับ อ. ช่วยยกตัวอย่างซักโค้ดครับ

ขอบคุณ อ. ที่สละเวลาตอบคำถามมากๆครับ
2

555+++ สงสัยจะยาว

คำตอบตามความเป็นจริงคือ ไม่มีส่วนมากครับ....

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

ผมไม่มีคำแนะนำ เพราะไม่รู้วิธีที่ใช้อยู่ครับ จริงๆคือลองเลือกวิธีพื้นฐานสักวิธีแล้วค่อยๆแก้ไขไปหากเจออุปสรรค งานจะได้ก้าวหน้าครับ และหลักๆคือกำหนดให้สอดคล้องกับโค้ดที่ใช้ ครับ
3
^