คำถามติดแท็ก database-design

การพัฒนาสกีมาแนวคิดและ / หรือโมเดลเชิงตรรกะและ / หรือการตั้งค่าทางกายภาพของฐานข้อมูล


7
ฉันควรเก็บที่อยู่อีเมลไว้ในฐานข้อมูลประเภทใด
ฉันเข้าใจว่าที่อยู่อีเมล 254 ตัวอักษรนั้นถูกต้อง แต่การใช้งานที่ฉันได้วิจัยมักจะใช้ varchar (60) ถึง varchar (80) หรือเทียบเท่า ตัวอย่างเช่น: คำแนะนำ SQL Serverนี้ใช้ varchar (80) หรือตัวอย่างของ Oracle มีเหตุผลที่จะไม่ใช้จำนวนอักขระสูงสุด 254 ตัวหรือไม่ varchar ตามคำจำกัดความไม่ใช้ที่เก็บข้อมูลเท่าที่จำเป็นเพื่อเก็บข้อมูลหรือไม่ มีนัยยะเกี่ยวกับประสิทธิภาพ / การแลกเปลี่ยนที่สำคัญซึ่งทำให้การใช้งานจำนวนมากใช้น้อยกว่า 254 อักขระที่เป็นไปได้ทั้งหมดหรือไม่

6
แนวปฏิบัติที่ดีที่สุดในช่องของบุคคลทั่วไป (ชื่อ, อีเมล, ที่อยู่, เพศ ฯลฯ ... ) [ปิด]
อะไรคือแนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับความยาวและประเภทข้อมูลในฟิลด์ทั่วไปเช่น: ชื่อจริง นามสกุล ที่อยู่ อีเมล์ เพศ สถานะ เมือง ประเทศ หมายเลขโทรศัพท์ ฯลฯ ....

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

5
ซ้อนกันดูการออกแบบฐานข้อมูลที่ดี?
ฉันได้อ่านนานมาแล้ว หนังสือระบุว่าเราไม่ควรอนุญาตให้มีมุมมองแบบซ้อนใน SQL Server ฉันไม่แน่ใจว่าทำไมเราไม่สามารถทำเช่นนั้นหรือฉันอาจจำคำสั่งที่ไม่ถูกต้อง นักเรียน SELECT studentID, first_name, last_name, SchoolID, ... FROM students CREATE VIEW vw_eligible_student AS SELECT * FROM students WHERE enroll_this_year = 1 ครู SELECT TeacherID, first_name, last_name, SchoolID, ... FROM teachers CREATE VIEW vw_eligible_teacher AS SELECT * FROM teachers WHERE HasCert = 1 AND enroll_this_year = …

5
วิธีออกแบบฐานข้อมูลสำหรับจัดเก็บรายการที่เรียงลำดับ?
ฉันต้องการจัดเก็บรายการที่เรียงลำดับไว้ในฐานข้อมูล ฉันต้องการดำเนินการต่อไปนี้อย่างมีประสิทธิภาพ Insert (x) - แทรก record x ลงในตาราง ลบ (x) - ลบบันทึก x จากตาราง ก่อนหน้า (x, n) - ส่งคืนระเบียน 'n' ก่อนหน้าระเบียน x ในรายการที่เรียงลำดับ หลังจาก (x, n) - ส่งคืนระเบียน 'n' ที่ประสบความสำเร็จในการบันทึก x ในรายการที่เรียงลำดับ First (n) - ส่งคืนระเบียน 'n' แรกจากรายการที่เรียงลำดับ Last (n) - ส่งคืนระเบียน 'n' ล่าสุดจากรายการที่เรียงลำดับ เปรียบเทียบ (x, y) - ให้สองเรคคอร์ด …


4
วิธีที่ดีที่สุดในการจัดเก็บที่อยู่อีเมลใน PostgreSQL คืออะไร
ประเภทข้อมูลที่เหมาะสมในการจัดเก็บที่อยู่อีเมลใน PostgreSQL คืออะไร ฉันสามารถใช้varchar(หรือแม้กระทั่งtext) แต่ฉันสงสัยว่ามีประเภทข้อมูลเฉพาะสำหรับอีเมล

2
โมเดลฐานข้อมูลพร้อมผู้ใช้บทบาทและสิทธิ์
ฉันมีโมเดลฐานข้อมูลพร้อมโต๊ะผู้ใช้และตารางบทบาท ฉันต้องการควบคุมการเข้าถึง (สิทธิ์) ให้มากถึง 10 องค์ประกอบที่แตกต่างกัน การเข้าถึงสามารถได้รับทั้งบทบาทหรือผู้ใช้คนเดียว ด้านล่างนี้เป็นคำจำกัดความของตารางของผู้ใช้บทบาทและรายการ: CREATE TABLE users ( id serial NOT NULL PRIMARY KEY, username character varying UNIQUE, password character varying, first_name character varying, last_name character varying, ... ); CREATE TABLE roles ( id serial NOT NULL PRIMARY KEY, name character varying NOT NULL, description character …

5
ฉันสามารถเพิ่มข้อ จำกัด ที่ไม่ซ้ำใครเพื่อละเว้นการละเมิดที่มีอยู่ได้หรือไม่?
ฉันมีตารางซึ่งขณะนี้มีค่าซ้ำกันในคอลัมน์ ฉันไม่สามารถลบรายการซ้ำที่ผิดพลาดเหล่านี้ได้ แต่ฉันต้องการป้องกันไม่ให้เพิ่มค่าที่ไม่ซ้ำกันเพิ่มเติม ฉันสามารถสร้างสิ่งUNIQUEที่ไม่ตรวจสอบความสอดคล้องที่มีอยู่ได้หรือไม่ ฉันลองใช้NOCHECKแล้วแต่ไม่สำเร็จ ในกรณีนี้ฉันมีตารางที่ผูกข้อมูลสิทธิ์การใช้งานกับ "CompanyName" แก้ไข:การมีหลายแถวที่มี "CompanyName" เดียวกันนั้นเป็นข้อมูลที่ไม่ดี แต่เราไม่สามารถลบหรืออัปเดตข้อมูลซ้ำเหล่านั้นได้ในขณะนี้ วิธีหนึ่งคือการINSERTใช้ s ที่เก็บไว้ซึ่งจะล้มเหลวในการทำซ้ำ ... ถ้าเป็นไปได้ที่ SQL จะตรวจสอบความเป็นเอกลักษณ์ของตัวเองมันจะดีกว่า ข้อมูลนี้ถูกสอบถามโดยชื่อ บริษัท สำหรับรายการซ้ำที่มีอยู่สองสามรายการนี้จะหมายความว่ามีการส่งคืนและแสดงแถวจำนวนมาก ... แม้ว่าจะเป็นความผิด แต่ก็เป็นที่ยอมรับในกรณีการใช้งานของเรา เป้าหมายคือการป้องกันในอนาคต ดูเหมือนว่าฉันจากความคิดเห็นที่ฉันต้องทำตรรกะนี้ในขั้นตอนการจัดเก็บ

2
เป็นการปฏิบัติที่ไม่ถูกต้องหรือไม่ที่จะมีความสัมพันธ์แบบหนึ่งต่อหนึ่งที่ไม่เหมือนใคร
Say โต๊ะcarมีความสัมพันธ์แบบหนึ่งต่อหนึ่งตารางelectric_car, และgas_car hybrid_carหาก a carคือelectric_carมันไม่สามารถปรากฏในgas_carหรืออีกต่อไปhybrid_carฯลฯ มีอะไรผิดปกติกับการออกแบบเช่นนี้หรือไม่? ปัญหาบางอย่างที่อาจเกิดขึ้นตามท้องถนน?

3
การออกแบบฐานข้อมูล: ตารางใหม่กับคอลัมน์ใหม่
(นี่แนะนำให้เป็น repost ที่นี่จาก StackOverflow) ขณะนี้มีตาราง .. และต้องเริ่มเพิ่มคอลัมน์ข้อมูลใหม่เข้าไป ไม่ใช่ทุกระเบียน (แม้จะก้าวไปข้างหน้าด้วยข้อมูลใหม่หลังจากเพิ่มคอลัมน์ข้อมูลใหม่) จะมีข้อมูล ดังนั้นฉันจึงสงสัยว่าสิ่งนี้จะเหมาะสมกว่าสำหรับตารางใหม่หรือไม่เนื่องจากเป็นส่วนขยายของแถวข้อมูลบางส่วนและไม่สามารถใช้ได้กับทุกแถว กล่าวอีกนัยหนึ่งเนื่องจากจะมีคอลัมน์ที่ไม่ได้ใช้จำนวนมากสำหรับองค์ประกอบข้อมูลใหม่เหล่านั้นดูเหมือนว่าจะเหมาะกว่าสำหรับตารางใหม่ใช่หรือไม่ ตารางแรกคือบันทึกการดูหน้าเว็บ (ปัจจุบันมีจำนวน 2 ล้านระเบียน) - รหัส - ที่อยู่ IP - ดูครั้ง - ประทับเวลาที่ _ สร้าง - วันที่ สำหรับที่อยู่ IP ทุกรายการจะมีการบันทึกต่อวันและมีการเพิ่มการเปิดดูหน้าเว็บต่อเนื่องในการดูครั้งต่อวัน ฟิลด์เพิ่มเติมสำหรับจุดติดตามต้นทาง (เช่นแหล่งที่มาของการวิเคราะห์ของ Google / สื่อ / แคมเปญ) ไม่ใช่ทุกครั้งที่มีข้อมูล ฉันจะสมมติว่าประมาณ 10% ของแถวจะมีข้อมูล (เนื่องจากโดยปกติแล้วจะมีการเชื่อมโยงกับการเข้าชมครั้งแรกเท่านั้น) การใช้งานหลักสำหรับข้อมูลจะเป็นคุณลักษณะที่ผู้คนมาจาก เรื่องนี้อาจจบลงด้วยการใช้บ่อย ๆ (ซึ่งดูเหมือนว่าจะยืมตัวไปที่โต๊ะเดี่ยว) ขอบคุณความคิดเห็น - …

4
ฉันจะแสดงรายการหรือค้นหาชื่อคอลัมน์ทั้งหมดในฐานข้อมูลของฉันได้อย่างไร
ฉันต้องการค้นหาสตริงในชื่อคอลัมน์ที่มีอยู่ในฐานข้อมูล ฉันกำลังทำงานในโครงการบำรุงรักษาและฐานข้อมูลบางส่วนที่ฉันจัดการมีมากกว่า 150 ตารางดังนั้นฉันกำลังมองหาวิธีที่รวดเร็วในการทำเช่นนี้ คุณแนะนำเมนูใด?

5
เหตุใดข้อ จำกัด UNIQUE จึงอนุญาตให้ NULL เพียงหนึ่งอันเท่านั้น
ในทางเทคนิค NULL = NULL เป็นเท็จโดยตรรกะนั้น NULL จะเท่ากับ NULL ใด ๆ และ NULL ทั้งหมดนั้นแตกต่างกัน นี่ไม่ควรบอกเป็นนัยเลยว่า NULL ทั้งหมดนั้นไม่เหมือนใครและดัชนีที่ไม่ซ้ำกันควรอนุญาตให้มี NULL จำนวนเท่าใด?

5
ทำไมถึงมีประเภทข้อมูล varchar อยู่?
ฐานข้อมูลของฉันหลายแห่งมีเขตข้อมูลที่กำหนดเป็น varchars นี่ไม่ได้เป็นปัญหามากนักตั้งแต่ฉันอาศัยและทำงานในอเมริกา (ภาษาเดียวที่มีอยู่คือ "อเมริกัน" อะแฮ่ม ) หลังจากทำงานกับฐานข้อมูลประมาณ 5 ปีฉันก็พบว่าในที่สุดฉันก็พบปัญหาเกี่ยวกับลักษณะที่ จำกัด ของเขตข้อมูล varchar และฉันต้องแก้ไขเขตข้อมูลของฉันเพื่อเก็บข้อมูลเป็น nvarchars หลังจากต้องทำการอัปเดตอีกครั้งในตารางการแปลงเขตข้อมูล varchar เป็น nvarchar ฉันเพิ่งคิดว่า - ทำไมเรายังคงทำเช่นนี้อยู่ ฉันตัดสินใจที่จะกำหนดเขตข้อมูลใหม่ทั้งหมดของฉันเป็น nvarchar แทน varchar ซึ่งเป็นสิ่งที่ฉันเรียนรู้ที่จะทำจากหนังสือเรียนเมื่อตอนที่ฉันอยู่โรงเรียนเมื่อ 10 ปีที่แล้ว ในปี 2554 และมี SQL Server รุ่นใหม่เมื่อปีที่แล้ว ทำไมเรายังคงสนับสนุนประเภทข้อมูล varchar เมื่อเราสามารถ / ควรใช้ nvarchar แทน? ฉันรู้ว่ามันมักจะเป็นที่ถกเถียงกันอยู่ว่า nvarchars เป็น "ใหญ่เป็นสองเท่า" เป็น varchars ดังนั้นการใช้พื้นที่เก็บข้อมูลอาจเป็นหนึ่งในการโต้แย้งสำหรับ maitaining …

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.