ผู้เขียน หัวข้อ: หลักการใช้ Null ใน table MySQL  (อ่าน 17812 ครั้ง)

0 สมาชิก และ 1 บุคคลทั่วไป กำลังดูหัวข้อนี้

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
หลักการใช้ Null ใน table MySQL
« เมื่อ: สิงหาคม 19, 2006, 03:35:01 AM »
0
  พอดีผมได้ลองดาวน์โหลดโปรแกรมตัวเต็มแล้ว และเอาฐานข้อมูลจากโรงพยาบาลแห่งหนึ่งมาลองเล่นดูนะครับ

ตัวฐานข้อมูลของ Hosxp ส่วนใหญ่ใน table ทำไมต้องมี  null ด้วยครับ

จากประสบการณ์ การทำงานมาหลาย ๆ ปี  null มีผลเสียหลายอย่างมากครับ
เช่น ทำให้การหาค่าต่าง  ๆ ผิดพลาด การจัดเรียง index ไม่ถูกต้อง เวลา ข้อมูล
มี record หลาย ๆ ล้าน การแยก string ที่ไม่มีความยาว เช่น "" การเก็บข้อมูล
ที่มีช่องว่าง เวลาเอามาวิเคราะห์ แล้วออก report จะมีปัญหาเวลา record โต  ๆ
ซึ่งการออกแบบฐานข้อมูล ถ้าฐานไม่ดี flow จะรวนง่ายครับ ยิ่ง ระบบ EMR การใช้
table ซ้ำซ้อน แยกที่เก็บมาก ๆ จะมีการดึง traffic ตลอดเวลา
ปัญหาที่พบเกี่ยวกับการ ใช้  null ใน mysql myisam ที่เจอบ่อย ๆ นะครับ
คือมีเครื่องลูก select ข้อความแปลก ๆ จะทำให้ระบบค้าง process log ยาว
หรือการ restart ตัวเองใน mysql บางรุ่นครับ
ส่วนตัว index เดี๋ยววันหลัง จะมาถามต่อนะครับ
« แก้ไขครั้งสุดท้าย: สิงหาคม 19, 2006, 03:48:53 AM โดย kawkow »
 

doramon

  • บุคคลทั่วไป
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #1 เมื่อ: สิงหาคม 19, 2006, 03:44:33 AM »
0
ครับขอบคุณที่แนะนำครับ

ผมตอบแทน อ. ชัยพร คงไม่ได้

แต่ผมมีเห็นผลที่ผมคิดเองครับ
 ???  คืออาจจะเกิดจากในเมื่อมีการพัฒนาความต้องการข้อมูลมาขึ้นจึงจำเป็นจะต้องมีการเพิ่ม field ขึ้นมาเพื่อเก็บข้อมูล  แต่การเพิ่มมา ก็จำเป็นจะต้องเป็น ค่า null  ใน ข้อมูล เก่าๆๆ เนื่องจากยังไม่เคยมีอันนี้ก่อนครับ

ถูกหรือเปล่าก็ไม่รู้ คิดเองครับ

ส่วนวิธีใช้ข้อมูลทีมี null ด้วย ผมจะใช้วิธีนี้ครับ

Ifnull( field name , ค่า 1   , ค่า 2 )

หรือ

select   *  from  table  where  ???  not  null 

แบบนี้ครับ

ส่วนถ้าเป็นตัวที่เป็น PK อ. เข้าก็จะย้อนหลังไปเพิ่มให้อยุ่แล้วครับ

« แก้ไขครั้งสุดท้าย: สิงหาคม 19, 2006, 03:49:06 AM โดย doramon(saiyok) »

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #2 เมื่อ: สิงหาคม 19, 2006, 03:53:24 AM »
0
คงแยกเป็นหลายประเด็นครับ
- เรื่องการจัด Index ไม่ถูกต้อง ยังไม่แน่ใจว่าใช่หรือไม่เพราะตัว DBMS จะเป็นตัวจัดการ Index ที่มีค่าเป็น null
- การหาค่าต่างๆ ผิดพลาด ตอนนี้ตัวระบบจะออกแบบให้ระวังค่า NULL อยู่แล้วครับ (ปกติข้อมูลในตารางควรจะมีค่า ยกเว้นรายการที่ไม่มีค่าก็จะยอมให้เป็น Null ได้ครับ)
- การแยก String ที่ไม่มีความยาว "" ผมยังไม่เข้าใจครับว่าจะมีปัญหาตรงใหน
- การออก report จะมีปัญหาเวลา record โตๆ ผมก็ยังไม่พบปัญหากับค่า NULL ครับ
- การออกแบบฐานข้อมูลถ้า ฐานไม่ดี flow จะรวน อันนี้ไม่แน่ใจครับว่าเกี่ยวกันหรือเปล่า
- ระบบ EMR จะใช้ข้อมูลเยอะอยู่แล้วครับ เวลานำข้อมูลมาใช้ส่วนใหญ่จะใช้ Primary key ในการดึงข้อมูลมาครับ คงไม่เกียวกับค่า Null


จริงๆ ที่ยอมให้มีค่า Null เนื่องจากในการ upgrade structure หากบังคับไม่ให้มีค่า Null มันจะ Upgrade ไม่ได้ครับ แต่หากคิดว่าค่า Null มีความสำคัญจริงๆ สามารถกำหนดใน field ในตารางให้เป็น Not null ก็ได้เช่นเดียวกันครับ
« แก้ไขครั้งสุดท้าย: สิงหาคม 19, 2006, 03:55:44 AM โดย manoi »
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #3 เมื่อ: สิงหาคม 19, 2006, 04:17:40 AM »
0
ขอบคุณครับ ที่ตอบ ถ้ามีปัญหาเรื่องการ  Upgrade ลองใช้ My front รุ่นใหม่ครับ
จะแก้ปัญหาเรื่อง null ได้ครับ มันจะมีปัญหาใน vertion ที่ต่ำกว่า 3.0 ลงไปครับ

เท่า ๆ ที่ลองศึกษาดูนะครับ
field ที่ต้องเก็บค่า null คือ fieldที่ต้องการไปวิเคราะห์ครับ
ค่า null คือค่าที่เราไม่รู้ แต่เรารู้ว่ามี
เช่น
1. การวิเคราห์การตลาด การออกแบบสอบถามว่าคุณใช้สบู่อะไร คนตอบไม่ตอบ
ถ้าในแบบสอบถามเราไม่มีคำว่าคนตอบไม่ตอบ เราต้องใส่ค่าืnull เพื่อไปวิเคราะห์ อันนี้
เข้าหลัก 9 table ครับ เอาค่าไม่รู้ไปวิเคราะ์ััำำห์ต่อได้ แต่กับ EMR คนไข้มา ER ไม่ได้สติ
ตอบไำม่ได้ว่าชื่ออะไร เราก็ใส่ว่าไม่ทราบชื่อได้ ไม่งั้นการหา ค่าืnull เพื่อ เก็บค่าทางสถิติจะเพี้ยน ถ้าจะให้ออกมาตรง คนที่เขียน  Hard code ต้องคอยระมัดระวังในการเขียนตลอดเวลาครับ ถ้าโค๊ดพลาดเมื่อไหร่ ก็ผิดหมด

2. การไม่ใส่ค่าเพื่อไม่ต้องต้องการให้คนอื่นได้รู้ พนักงานธนาคารต้องการกู้เงินจากธนาคารที่ทำการอยู่ แต่นโยบายบริษัทไม่ต้องการให้ พนักงานคนอื่นรู้ว่ามีเงินเดือนเท่าไหร่จึงใส่ค่าที่เป็น null เข้าไป นี่เป็นเรื่องจริงครับ
ในการทำงานมาหลาย  ๆ ปี

ยังไงโปรแกรมเพิ่งเริ่มยังแก้ไขทันครับ ถ้านาน ๆ ไป มันจะแก้ยากครับ
 

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #4 เมื่อ: สิงหาคม 19, 2006, 04:26:19 AM »
0
ขอบคุณที่ให้ความรู้ครับ
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #5 เมื่อ: สิงหาคม 19, 2006, 04:41:15 AM »
0
อีกนิดนะครับ การทำ index

แบบว่าเป็นคนขี้สงสัยน่ะครับ

เห็น ตัว index เป็น hos_guid ทำไมต้องทำเป็น primary , uni ,hos_guid_uni

ถึง 3 ตัวด้วยครับ

เพราะ primary คือ ห้ามซ้ำ ไม่มี  null
          uni        คือ ห้ามซ้ำ  มี    null ได้
         
การเอาค่าเดียว ไปทำ index หลายอย่างเป็นการเพิ่มการ เก็บ index เกินควรครับ

แต่ ถ้าทำ index หลายตัวผม เช่น ทอม่า เพื่อออก report er ได้รวดเร็วขึ้นนี้ มีประโยช์ืครับ

ขอโทษที่รบกวนครับ แต่อยากรู้จิง ๆ เผื่อผมยังไม่รู้อะไรอีกน่ะครับ
 

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #6 เมื่อ: สิงหาคม 19, 2006, 04:45:16 AM »
0
ในตารางอะไรครับ อาจจะเกิดจากการ Upgrade structure ก็ได้ครับที่สร้าง Index ขึ้นมาเอง แต่หากคิดว่ามันซ้ำซ้อนก็ลบออกได้ครับ
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #7 เมื่อ: สิงหาคม 19, 2006, 04:53:16 AM »
0
มันอยู่ในตาราง patient ,ovst ซึ่ง เป็นตารางหลัก และมีโอกาสที่ table จะโตได้ครับ

ตอนนี้ ใน hosxp ได้ลองทำ cluster repilcation ตอนนี้ผมกำลังศึกษาน่ะครับยัง gen

ไม่ขึ้นเลยพอให้คำปรึกษาได้มั่งไหมครับ
 

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #8 เมื่อ: สิงหาคม 19, 2006, 05:02:02 AM »
0
คุณ kawkow อยู่ รพ.อะไรครับ

ในส่วนของ cluster ผมก็สนใจเหมือนกันครับ แต่ยังไม่มีเวลาทดสอบเลยครับ
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #9 เมื่อ: สิงหาคม 19, 2006, 05:17:16 AM »
0
ผมเป็นโปรแกรมเมอร์ครับ พอดีมีเพื่อนทำงานโรงพยาบาลที่ใช้ hosxp

เขามีปัญหาในการใช้งานครับ บอกว่ายังเรียกเก็บไม่ได้มาหลายเดือนแล้วครับ

เลยเอาโปรแกรมกับ ดาต้ามา ให้ดู ผมลองดู แล้วเกิดความสนใจในตัวโปรแกรมครับ

เพราะว่ามันเป็น โอเพ่น แล้วสามารถ เอาเข้า  GNU ได้ เลยลองมานั่งวิเคราะห์ดู

ที่น่าสนใจเป็นระบบเมนูครับ เก็บค่าตัวแปรเล็ก ๆ มาเรียงใน tebel เดียวกัน (ลักษณะนี้

เกิดใน mysql 4.0 เป็นต้นมา) เลยบอกเพื่อนว่าให้ใช้ ๆ ไปก่อน เพราะโครงสร้างส่วนใหญ่ดี

ใช้ในโรงพยาบาลชุมชนขนาดไม่เกิน 100 ตัวลูกน่าใช้ได้เป็นอย่างดี ส่วน hard code ต้อง ค่อย ๆ แก้ไป ใช้ความพยายามหน่อยในช่วงแรก ไม่น่าเกิน 3 ปี โปรแกรมน่าจะสมบูรณ์ ขึ้นมาก เพราะมีการพัฒนาอย่างต่อเนื่อง

ตอนนี้กำลัง เล็ง ๆ ระบบ LIS อยู่เพราัะเคยทำมาด้วยครับ
 

ออฟไลน์ manoi

  • Hero Member
  • *****
  • กระทู้: 8,669
  • Respect: +170
    • ดูรายละเอียด
    • HOSxP Community Center
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #10 เมื่อ: สิงหาคม 19, 2006, 05:50:58 AM »
0
ปัญหาที่ รพ. เป็นเรื่องอะไรครับ
HOSxP Project Manager / Cheif Developer / BMS MD

ออฟไลน์ nuttavut

  • Hero Member
  • *****
  • กระทู้: 2,634
  • Boom-Beam
  • Respect: +15
    • ดูรายละเอียด
    • โรงพยาบาลวิเชียรบุรี
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #11 เมื่อ: สิงหาคม 24, 2006, 23:25:28 PM »
0
คุณ kawkow ทำ LIS ของอะไรอยู่.....พอดีกำลังสนใจเรื่องนี้อยู่...กรุณาให้รายละเอียดหน่อยครับ
..Wichianburi Hospital  Phetchabun ..
Mr.Nuttavut   System Admin,Programer
Master:: HP DL380 G7 RAM 24GB Raid5 CentOS5.2  Percona 5.1.45
Slave::HP ProLiant ML150G3 Xeon Raid1  CentOS5.2   ,Percona 5.1.45
HOSxP 3.55.7.14, LIS (iLab),PACS
Tel. 0-5692-8169 ต่อ 180  | รพ. ขนาด 150+ เตียง |17 สอ. HOSxP_PCU |BMS Datacenter 18 node |
WWW : http://wichianhos.thaieasydns.com
|..ดูแลห่วงใย ใส่ใจบริการ รักษาได้มาตรฐาน พัฒนางานสู่ความเป็นเลิศ ..|   PDS Project  |  การนำเข้า Script คลิก

ออฟไลน์ kawkow

  • Newbie
  • *
  • กระทู้: 6
  • Respect: 0
    • ดูรายละเอียด
Re: หลักการใช้ Null ใน table MySQL
« ตอบกลับ #12 เมื่อ: สิงหาคม 29, 2006, 02:56:13 AM »
0
 ทำ CBC
       UA
       STAT Chemistry
       Medical Chemistry
       Blood Gas
       PT/PTT
      โดย ใช้ C++ ,perl ,foxpro
      ทำให้ หลาย ๆ บริษัทของเมืองไทยครับ

ส่วนตอนนี้ กำลังลอง ทำ ระบบ OPD CARD online อยู่ครับ ให้บันทึกข้อมูล มาก ๆ
ให้อยู่ ในส่วน ของ server ให้หมดครับ ติดนิดเดียวคือ ข้อมูลที่มากกว่า 600 Gb mysql
จะอืดมาก ๆ ครับเลย อยากลอง ระบบ cluster แต่ยังทำไม่ได้ครับ
« แก้ไขครั้งสุดท้าย: สิงหาคม 29, 2006, 02:59:52 AM โดย kawkow »