คือผมทำเว็บเพลงอะ แล้วตอนผมใส่ผมก็จะใส่ไปทีละเพลงแล้วข้อมูลจะอยู่ในตารางเดียว ลักษณะนี้
songid songname album artist
1 song1 album1 artist1
2 song2 album2 artist2
3 song3 album1 artist1
4 song4 album3 artist3
5 song5 album2 artist2
6 song6 album3 artist3
6 song7 album4 artist3
พอเข้าใจผมมั๊ย
คือแต่ละเพลง จะไม่ซ้ำกันเลย แต่ album จะซ้ำกันมาก และ artist ก็จะซ้ำกันมากกว่า album เสียอีก
แล้วเราพอมีวิธีไหนบ้างครับ ทีลดความซ้ำซ้อนของข้อมูลนี้
งง อะครับ จะลดความซ้ำซ้อนอะไรเอ่ยครับ :(
ก็คือถ้า album artist ซ้ำกัน ก็ให้เหลือเพียงอันเดียวพออะครับ
แล้วใน song ก็ค่อยเพิ่มเป็น album_id กับ artist_id ขึ้นมาใหม่
แต่ผมไม่รู้วิธีการที่จะสร้าง ตารางขึ้นมาใหม่แบบนั้นอะครับ
ใครแวะผ่านมาช่วยขยายความทีนะคับ ผมยัง งงอยู่ครับ
ยังไงลองแอด MSN มาคุยดีกว่ามั้ยครับ ผมชักงงๆ :P
มันก็น่างงอยู่ครับ
คือ
เมื่อก่อนเว็บผมมีโครงสร้างฐานข้อมูลเป็น ตารางเดียว ยึด รายชื่อเพลงเป็นหลัก คือ
id 1 - เพลง ก - ศิลปิน a - อัลบั้ม 1
id 2 - เพลง ข - ศิลปิน a - อัลบั้ม 2
id 3 - เพลง ค - ศิลปิน a - อัลบั้ม 2
id 4 - เพลง ง - ศิลปิน b - อัลบั้ม 3
id 5 - เพลง จ - ศิลปิน b - อัลบั้ม 3
id 6 - เพลง ฉ - ศิลปิน b - อัลบั้ม 4
จะเห็นไว้ว่า db ต้องเปลืองพื้นที่กับการเก็บ ชื่อศิลปิน ชื่ออัลบั้ม ซ้ำๆ กันเยอะมาก
ผมเลยอยากให้มันเปลื่ยนใหม่เป็น
ตารางแรก
id เพลง - ชื่อเพลง - id ศิลปิน - id อัลบั้ม
1 - เพลง ก - 1 - 1
2 - เพลง ข - 1 - 2
3 - เพลง ค - 1 - 2
4 - เพลง ง - 2 - 3
5 - เพลง จ - 2 - 3
6 - เพลง ฉ - 2 - 4
ตาราง ที่ 2
ตาราง 2 ก็จะเก็บ ว่า
ศิลปิน id=1 เนี้ย ชื่อศิลปินว่าอะไร
ตาราง 3
ตาราง 3 ก็จะดูอีกทีว่า
อัลบั้ม id=1 เนื้ย มันคืออัลบั้มอะไร
พอเข้าใจไหม
คำถามของผมคือ เราจะแปล ตาราง แบบที่มัน ซ้ำๆ กันมาเป็นแบบใหม่นี้ยังไง
อ่อพอเข้าใจแล้วครับ แล้วต้องการอะไรครับ
โครงสร้างฐานข้อมูล หรือว่า Code PHP ครับ :P
ไม่ต้องถึง กับ เขียน code ให้หรอกครับ
ผมอยากทราบแค่วิธีแปลงมาเป็นแบบนั้นอะครับ
เดี๋ยวตัว code เอง หาเอง ครับ
แต่ตอนนี้ผมไม่มีแนวคิดอะไรเลยครับ
คงต้องเริ่ม design ใหม่ทั้งหมดแล้วค่ะ
อันเก่ามันซ้ำซ้อนจริงด้วยค่ะ
ควรจะ design แยกออกเป็นประเภท
อย่างเช่น ตารางรายชื่อเพลง, ตารางศิลปิน, ตารางประเภทเพลง ประมาณนี้ค่ะ ::)
อืม....ผมก็ไม่เคยทำด้วยนะครับตัวนี้ ตอนนี้คิดคราว ๆ ได้ประมาณว่าต้องทำอย่างน้อย 2 tables แล้วก็ต้องมีการทำ index ด้วย
ข้อมูลมี: ชื่อเพลง ชื่ออัลบั้ม ชื่อศิลปิน
เงื่อนไข: ต้องการลดการใช้ อัลบั้มและศิลปิน ที่มีความซ้ำซ้อน
ความเหมือน: อัลบั้มกับศิลปิน จะเหมือนกันทุกครั้ง(หรือเปล่า)
table แรก
songid songname indexid
1 song1 1
2 song2 2
3 song3 1
4 song4 3
5 song5 2
6 song6 3
7 song7 4
table ที่สอง
indexid album artist
1 album1 artist1
2 album2 artist2
3 album3 artist3
4 album4 artist4
อันนี้เป็นแค่แนวคิดนะครับ อย่าไปคิดมากกับมันนะครับ มันขึ้นอยู่กับลักษณะการใช้งานด้วยนะครับ ลองไปประยุกต์ตามความเหมาะสมนะครับ
ขอยกตัวอย่างเลยนะครับ
ตาราง music
songid | songname | album | artist |
1 | อยู่บำรุง | 1 | 1 |
2 | ระยะปลอดภัย | 1 | 1 |
3 | You Are Not Alone | 2 | 2 |
4 | Leave Me Alone | 3 | 2 |
ตาราง album
albumid | albumname |
1 | Acadamy Fantasia |
2 | Micheal Single Vesion |
ตาราง artist
id | artistname |
1 | ว่าน ธนกฤต |
2 | Micheal Jackson |
การดึงข้อมูลมาแสดง
ก็ใช้คำสั่งประมาณนี้นะครับ
<?php
$dbhostname = "localhost";
$dbuser = "ชื่อผู้ใช้ฐานข้อมูล";
$dbpassword = "พาสเวิร์ดฐานข้อมูล";
$dbname = "ชื่อฐานข้อมูล";
mysql_connect($dbhostname, $dbuser, $dbpassword) or die("Error Can not Connect To Database Server");
mysql_select_db($dbname) or die("Error Not Selete Database");
?>
<table width="600px">
<?
$music = mysql_query("select * from music order by songid");
while($dbarr = mysql_fetch_array($user)) {
?>
<tr>
<td width="15%"><?php echo $dbarr['songid'] ; ?></td>
<td width="35%"><?php echo $dbarr['songname'] ; ?></td>
<td width="25%"><?php echo $dbarr['album'] ; ?></td>
<td width="25%"><?php echo $dbarr['artist'] ; ?></td>
</tr>
<?php } ?>
</table>
ตรงส่วนของ <?php echo $dbarr['album'] ; ?> กับ <?php echo $dbarr['artist'] ; ?>
ลองนำไปดัดแปลงเป็นตัวแปรดูครับ
ซึ่งตรงนี้ผมยังคิดมุกมะค่อยออก รอท่านอื่นมาประสานต่อละกันครับ
กำ กดผิดกดสองครั้ง ...
อย่าเพิ่งไปสนใจโค้ดเลยค่ะ สำคัญที่ database ต้อง design ให้ถูกดีกว่าค่ะ นอมัลไลซัก 3NF ก็ใช้ได้แล้วค่ะ ::)
อ้างถึงจาก: zaakikuya ใน 12 กันยายน 2009, 21:37:03
อย่าเพิ่งไปสนใจโค้ดเลยค่ะ สำคัญที่ database ต้อง design ให้ถูกดีกว่าค่ะ นอมัลไลซัก 3NF ก็ใช้ได้แล้วค่ะ ::)
พูดภาษาเทคนิคแล้วงง เลยครับ
ขอบคุณคุณ Se7enKeNz มากนะครับ
อีกอย่าง
ตรงอัลบั้ม ไม่จำเป็นต้องตรงกับ ชื่อศิลปิน อะครับ
ศิลปินคนหนึ่งอาจมีหลายอัลบั้มก็ได้
(http://www.cvpic.com/uploads/2e6c2d6c9db5fb8359229db6672a585e.png)
แบบนี้น่าจะพอได้กระมัง...