ผมมีตารางข้อมูลของข้อมูลวิชาเลือกนักเรียน ซึ่งแต่ละเทอมมี 3 วิชา
ปัญหามีมีอยู่ว่าเวลาผมจะค้นหาข้อมูลนักเรียนที่มีวิชาเลือกเนี่ย ผมต้องทำแบบนี้
SELECT * FROM subject_member WHERE member_now_1=(รหุัสวิชา) OR member_now_2=(รหุัสวิชา) OR member_now_3=(รหุัสวิชา);
ผมคิดว่าถ้าเขียนแบบนี้ มันจะไม่ค่อยเป็น dynamic สักเท่าไหร่นะครับ
ผมอยากทราบว่า ระหว่าง
- ใช้ php ตรวจสอบว่าตารางที่ขึ้นต้นด้วย member_now มีกี่ช่อง แล้วใช้ for ลูปแล้วเขียน OR เพิ่มไปเรื่อยๆ กับ
- ยุบ member_now ให้มีคอลัมน์เดียว เปลี่ยนเป็น varchar ขนาด 12 แล้วค้นหาด้วยการ
WHERE member_now LIKE %(รหุัสวิชา)%;แต่ผมกังวลว่ามันจะมีผลต่อความเร็วในการ query ข้อมูลออกมา และไม่สะดวกเวลาค้นหาเป็นสายชั้นด้วย
หรือถ้ามีวิธีอื่นที่น่าสนใจก็เสนอกันได้นะครับ
ขอบคุณมากครับ _/\_
on

database ออกแบบผิดนะครับ
Azadious Sat, 09/02/2013 - 10:15
database ออกแบบผิดนะครับ ไม่ควรทำ database แบบนี้ควรสร้าง bride table แยกวิชาเลือกออกมาถึงจะถูกนะครับ ทำแบบนี้แทบไม่ได้ใช้ SQL เลย ถ้ายังดึงดันใช้โปรแกรมมิ่งต่อไปแล้วพอปริมาณข้อมูลเพิ่มขี้นมามากๆ พอแรมมันเต็มเราจะไม่สามารถ query ข้อมูลได้อีกนะครับ
ขอบคุึณสำหรับคำแนะนำครับ ผมก็
itpcc Sat, 09/02/2013 - 10:57
In reply to database ออกแบบผิดนะครับ by Azadious
ขอบคุึณสำหรับคำแนะนำครับ
ผมก็กำลังคิดทำแบบนั้นเหมือนกัน เพื่อจะได้นำฐานข้อมูลไปใช้กับโครงกา่รอื่นได้ด้วย
ตอนนี้ผมคิดว่าจะแบ่งตารางนี้ออกเป็นสามส่วนคือ
แต่ก็มีปัญหาเหมือนที่ผมตั้งคำถามนั่นล่ะครับ
อีกอย่างคือ เคื่องที่ีเป็น db server กับ web server เป็นเครื่องเดียวกัน เลยไม่ได้เแคร์อะไรมากในตอนแรกน่ะครับ -_-"
แยก member_now_X
hiddenmin Sat, 09/02/2013 - 15:36
แยก member_now_X ออกไปเป็นอีกตารางหนึงครับ
normalize เถอะครับ
Architec Sat, 09/02/2013 - 18:49
normalize เถอะครับ จะได้ไม่เป็นภาระลูกน้อง = = (เหยด)
เอ่อ... ไม่ได้กวนอะไรนะครับ
itpcc Sat, 09/02/2013 - 20:59
In reply to normalize เถอะครับ by Architec
เอ่อ... ไม่ได้กวนอะไรนะครับ แต่ normalize หมายถึงอะไรครับ = ="
เชิญครับ
Architec Sat, 09/02/2013 - 22:27
In reply to เอ่อ... ไม่ได้กวนอะไรนะครับ by itpcc
เชิญครับ
ขอบคุณครับ ตอนนี้ผมแยกรหัสวิช
itpcc Sun, 10/02/2013 - 00:06
In reply to เชิญครับ by Architec
ขอบคุณครับ
ตอนนี้ผมแยกรหัสวิชาเลือกของแต่ละคนเป็นอีกตารางแล้ว โดยให้มี id ที่สัมพันธ์ แล้วแต่ละฟิลด์ ก็จะเป็น id ของวิชาที่ชี้ไปในตารางรายวิชา ประมาณนี้
แบบนี้พอจะเป็น normalize ยังครับ?
เริ่มต้นได้ดีครับ
Architec Sun, 10/02/2013 - 09:18
In reply to ขอบคุณครับ ตอนนี้ผมแยกรหัสวิช by itpcc
เริ่มต้นได้ดีครับ ยังงงๆกับตาราง member_mcourse อยู่ครับ น่าจะย่อยมาได้อีกครับ ตอนเรียนผมลืมไปเยอะเลย normalize กับแบบลึกซึ้งมาก
ขอบคุณครับ คือที่จริงไอ้เจ้า
itpcc Sun, 10/02/2013 - 13:36
In reply to เริ่มต้นได้ดีครับ by Architec
ขอบคุณครับ
คือที่จริงไอ้เจ้า now_x กับ term1_x เนี่ย ผมไว้เก็บ id ของวิชาที่จะเรียนวิชาเลือกน่ะครับ เลือกได้สามวิชาต่อเทอมน่ะครับ
น่าจะแยกเป็น ENROLL, SEMESTER
Architec Sun, 10/02/2013 - 16:09
In reply to ขอบคุณครับ คือที่จริงไอ้เจ้า by itpcc
น่าจะแยกเป็น ENROLL, SEMESTER ครับ จะได้ใช้ในการเรียกดูย้อนหลังรายภาคการศึกษาและก็จัดการวิชาได้อิสระกว่าครับ
STUDENT -> ENROLL(ลงทะเบียน) <- SUBJECT(วิชา) <- SEMESTER(ภาคการศึกษา) แล้วค่อยเข้ามา SELECT ดูว่าลงทะเบียนไปกี่วิชาแล้วครับ (นอกนั้นคงเป็นแยกตารางของอาจารย์ออกไปครับ)
คือถ้ามันยุ่งๆหรือไม่จำเป็นขนาดนั้นก็ไม่ต้องตามผมก็ได้ครับ ไม่ว่ากัน
พอเจอ data เยอะๆจะร้อง
kowito Mon, 11/02/2013 - 01:26
In reply to normalize เถอะครับ by Architec
พอเจอ data เยอะๆจะร้อง denormalize เถอะครับ จะได้ไม่เป็นภาระลูกหลาน