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

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

7
การสำรวจเป็นวิธีเดียวในการอัปเดตข้อมูลแอปจากฐานข้อมูลหรือไม่
แอปพลิเคชันต้องมีข้อมูลที่อัปเดตใหม่จากฐานข้อมูลมากที่สุดเท่าที่จะทำได้ ในกรณีเช่นนี้มีวิธีอื่นในการรับข้อมูลนอกเหนือจากการจับเวลาตามขอ (สำรวจ) ฐานข้อมูลหรือไม่ ฉันทำงานกับ MS SQL Server 2008 (และ. NET applications + Entity Framework) แต่ฉันต้องการรับรู้เกี่ยวกับฐานข้อมูลประเภทอื่นเช่นกัน

2
รับและนำการทดสอบประสิทธิภาพมาใช้กับ Google BigTables (และฐานข้อมูลรวมอื่น ๆ )
มีวิธีใดที่มีประสิทธิภาพในการทดสอบประสิทธิภาพการทำงานของโปรแกรมในการดำเนินการกับฐานข้อมูลโดยเฉพาะในสภาพแวดล้อมที่ตัวฐานข้อมูลเองไม่มีเครื่องมือเฉพาะ? ตัวอย่างเช่นใน Google App Engine การโหลดหน้าเว็บทั้งหมดจะถูกประเมินเป็นการดำเนินการเดียวซึ่งอาจรวมถึงการดำเนินการฐานข้อมูลเฉพาะ ปัญหานี้ยังมีอยู่ใน SQLite และฐานข้อมูลรวมอื่น ๆ เนื่องจากเป็นการยากที่จะสรุปบทคัดย่อการเลือกและการแทรก (เทียบเท่า) ที่จำเป็นต้องทำการทดสอบจึงมีเครื่องมือฐานข้อมูลที่แนะนำให้ทำการวินิจฉัยอย่างละเอียดมากขึ้นเกี่ยวกับคำถามประเภทนี้หรือไม่?

2
การปรับใช้ความสัมพันธ์แบบหลายต่อหลายคนกับข้อ จำกัด การมีส่วนร่วมโดยรวมใน SQL
ฉันควรนำไปใช้ใน SQL สถานการณ์ที่อธิบายไว้ในแผนภาพความสัมพันธ์ของเอ็นติตี้ต่อไปนี้อย่างไร? ในขณะที่มันจะแสดงทุกAประเภทกิจการที่เกิดขึ้นจะต้องเกี่ยวข้องกับอย่างน้อยหนึ่ง Bคู่ (แสดงโดยเส้นเชื่อมต่อคู่) และในทางกลับกัน ฉันรู้ว่าฉันควรสร้างสามตารางที่ตามมา: CREATE TABLE A ( a INT NOT NULL, CONSTRAINT A_PK PRIMARY KEY (a) ); CREATE TABLE B ( b INT NOT NULL, CONSTRAINT B_PK PRIMARY KEY (b) ); CREATE TABLE R ( a INT NOT NULL, b INT NOT NULL, CONSTRAINT R_PK …

4
วิธีจัดการกับการออกแบบตารางด้วยคอลัมน์ตัวแปร
ฉันมีสถานการณ์การออกแบบตารางและเป็นประเภทที่ไม่ใช่ DBA ต้องการความคิดเห็นที่ปรับขนาดได้มากกว่า สมมติว่าคุณถูกขอให้บันทึกข้อมูลบ้านในพื้นที่เมืองใหญ่โดยเริ่มจากย่านเล็ก ๆ (บ้าน 200 หลัง) แต่ในที่สุดจะเติบโตเป็นบ้าน 5 แสนหลัง คุณจะต้องจัดเก็บข้อมูลพื้นฐาน: ID # (# ล็อตที่ไม่ซ้ำกันที่เราสามารถใช้เป็นดัชนีที่ไม่ซ้ำกัน), Addr, City, State, Zip ปรับตารางง่าย ๆ จะจัดการกับมัน แต่ในแต่ละปีคุณจะถูกขอให้บันทึกข้อมูลพิเศษเกี่ยวกับบ้านทั้งหมด - และข้อมูลอะไรจะเปลี่ยนแปลงในแต่ละปี ตัวอย่างเช่นในปีแรกคุณจะถูกขอให้บันทึกชื่อและนามสกุลของเจ้าของวิดีโอ ในปีที่สองคุณจะถูกขอให้เก็บนามสกุล แต่ดัมพ์วิดีโอสแควร์และเริ่มรวบรวมชื่อเจ้าของแทน สุดท้าย - ในแต่ละปีจำนวนคอลัมน์พิเศษจะเปลี่ยนไป อาจเริ่มต้นด้วย 2 คอลัมน์เพิ่มเติมจากนั้นไปที่ 6 ปีหน้าจากนั้นกลับไปที่ 2 ดังนั้นวิธีหนึ่งในตารางคือพยายามเพิ่มข้อมูลที่กำหนดเองเป็นคอลัมน์ในตารางบ้านเพื่อให้มีเพียงหนึ่งตาราง แต่ฉันมีสถานการณ์ที่มีคนวางตารางสำหรับสิ่งนี้เช่น: คอลัมน์ "House Table": ID, Addr, City, State, Zip - ด้วยหนึ่งแถวต่อบ้าน …

2
การใช้ขนาดคอลัมน์ใหญ่เกินความจำเป็น
ฉันกำลังสร้างฐานข้อมูล SQL Server กับคนอื่น หนึ่งในตารางมีขนาดเล็ก (6 แถว) พร้อมข้อมูลที่อาจคงที่ มีความเป็นไปได้จากระยะไกลว่าจะมีการเพิ่มแถวใหม่ ตารางมีลักษณะดังนี้: CREATE TABLE someTable ( id int primary key identity(1,1) not null, name varchar(128) not null unique ); INSERT INTO someTable values ('alice', 'bob something', 'charles can dance', 'dugan was here'); ฉันกำลังดูความยาวถ่านของnameคอลัมน์นั้นและฉันคิดว่าค่าของมันอาจจะไม่ใหญ่กว่าพูด 32 ตัวอักษรอาจจะไม่ใหญ่กว่า 24. มีประโยชน์กับการเปลี่ยนคอลัมน์นี้เป็นหรือไม่ เช่นvarchar(32)? นอกจากนี้มีข้อได้เปรียบใด ๆ หรือไม่ที่จะรักษาขนาดคอลัมน์เริ่มต้นให้เป็นทวีคูณของ 4, …

2
ข้อควรพิจารณาเกี่ยวกับคีย์หลักที่ไม่ใช่จำนวนเต็ม
บริบท ฉันออกแบบฐานข้อมูล (บน PostgreSQL 9.6) ซึ่งจะเก็บข้อมูลจากแอปพลิเคชันแบบกระจาย เนื่องจากลักษณะการกระจายของแอปพลิเคชันฉันไม่สามารถใช้จำนวนเต็มเพิ่มโดยอัตโนมัติ ( SERIAL) เป็นคีย์หลักของฉันเนื่องจากสภาพการแข่งขันที่เป็นไปได้ วิธีแก้ปัญหาตามธรรมชาติคือการใช้ UUID หรือตัวระบุที่ไม่ซ้ำกันทั่วโลก Postgres มาพร้อมกับประเภทในตัวUUIDซึ่งเป็นขนาดที่พอดี ปัญหาที่ฉันมีกับ UUID เกี่ยวข้องกับการดีบัก: มันเป็นสตริงที่ไม่เป็นมิตรกับมนุษย์ ตัวระบุไม่ff53e96d-5fd7-4450-bc99-111b91875ec5บอกอะไรฉันในขณะACC-f8kJd9xKCdที่ไม่รับประกันว่าจะไม่ซ้ำใคร แต่บอกว่าฉันกำลังจัดการกับACCวัตถุ จากมุมมองการเขียนโปรแกรมเป็นเรื่องปกติที่จะดีบักเคียวรีแอปพลิเคชันที่เกี่ยวข้องกับวัตถุต่าง ๆ สมมติว่าโปรแกรมเมอร์ค้นหาACCวัตถุ (บัญชี) ที่ORDตาราง (ลำดับ) อย่างไม่ถูกต้อง ด้วยตัวระบุที่มนุษย์สามารถอ่านได้โปรแกรมเมอร์จะระบุปัญหาได้ทันทีในขณะที่ใช้ UUID เขาจะใช้เวลาในการพิจารณาว่ามีอะไรผิดปกติ ฉันไม่ต้องการเอกลักษณ์ "รับประกัน" ของ UUIDs; ฉันไม่ต้องการห้องพักบางส่วนสำหรับการสร้างปุ่มโดยไม่ให้เกิดความขัดแย้ง แต่ UUID เป็น overkill นอกจากนี้สถานการณ์กรณีที่เลวร้ายที่สุดมันจะไม่ใช่จุดจบของโลกหากเกิดการชน (ฐานข้อมูลปฏิเสธและแอปพลิเคชันสามารถกู้คืนได้) ดังนั้นการพิจารณาถึงความไม่เหมาะสมตัวระบุขนาดเล็ก แต่เป็นมิตรกับมนุษย์จะเป็นทางออกที่ดีสำหรับกรณีการใช้งานของฉัน การระบุวัตถุแอปพลิเคชัน ตัวระบุที่ฉันใช้มีรูปแบบต่อไปนี้: {domain}-{string}ซึ่ง{domain}จะถูกแทนที่ด้วยโดเมนวัตถุ (บัญชีคำสั่งผลิตภัณฑ์) และ{string}เป็นสตริงที่สร้างแบบสุ่ม ในบางกรณีอาจทำให้การแทรก …

1
การออกแบบฐานข้อมูลสำหรับโดเมนธุรกิจวิดีโอเกมที่มีความสัมพันธ์แบบหลายต่อหลายคน
ฉันค่อนข้างใหม่ในการออกแบบฐานข้อมูลและฉันตัดสินใจที่จะสร้างฐานข้อมูลสมมุติของตัวเองเพื่อฝึกหัด อย่างไรก็ตามฉันมีปัญหาในการสร้างแบบจำลองและทำให้เป็นมาตรฐานในขณะที่ฉันเห็นว่ามีความสัมพันธ์แบบหลายต่อหลายคน (M: N) คำอธิบายภาพจำลองทั่วไป ฐานข้อมูลมีวัตถุประสงค์เพื่อเก็บข้อมูลเกี่ยวกับผู้คนที่ทำงานในซีรี่ส์ Zelda ฉันต้องการติดตามคอนโซลที่สามารถเล่นเกมได้พนักงานที่มีส่วนร่วมในการพัฒนาเกมงานที่พนักงานมี ( พนักงานหลายคนทำงานในงานที่แตกต่างกันในหลายเกม ) ฯลฯ กฎเกณฑ์ทางธุรกิจ หลายพนักงานสามารถทำงานได้ในหลายเกม หลายเกมสามารถอยู่บนเดียวกันคอนโซล Multiple Consolesสามารถเป็นแพลตฟอร์มสำหรับเกมเดียวกันได้ หลายพนักงานสามารถมีเหมือนกันงาน พนักงานสามารถมีหลายงาน เกมสามารถมีหลายพนักงาน เกมสามารถมีหลายประเภทของงานในการพัฒนาของมัน เกมหลายเกมสามารถแนบJobประเภทเดียวกันได้ คอนโซลสามารถมีหลายคนที่ทำงานกับมัน คนสามารถทำงานได้ในหลายConsoles ชื่อแอตทริบิวต์และค่าตัวอย่าง ชื่อพนักงานซึ่งสามารถแบ่งออกเป็นชื่อแรกและนามสกุล (เช่น“ John” และ“ Doe”) ชื่อเกม (ตัวอย่างเช่น "Ocarina of Time") ตำแหน่งงาน (ตัวอย่างเช่น "การออกแบบระดับ", "ผู้อำนวยการ", "ความสงบ", "ผู้ออกแบบระดับ", "โปรแกรมเมอร์", "การรองรับหลายภาษา" ฯลฯ ) ชื่อคอนโซล (ตัวอย่างเช่น“ Game Boy Advance”) …

4
Blockchain (Bitcoin) เป็นฐานข้อมูลหรือไม่?
ฉันอ่านบทความข่าวบีบีซีและข้อความที่ตัดตอนมาต่อไปนี้ดึงดูดความสนใจของฉัน ดูเหมือนว่าอยู่ในกลุ่มความพร้อมใช้งานเสมอหรือการมีความพร้อมใช้งานสูงซึ่งอาจรวมถึงความปลอดภัยโดยอัตโนมัติ blockchain เป็นโซลูชันฐานข้อมูลที่มีศักยภาพสำหรับแอพพลิเคชั่นปริมาณมากและทันสมัยหรือไม่? มันค่อนข้างง่ายที่จะเห็นว่ามันคุ้มค่าสำหรับการทำธุรกรรมในปริมาณต่ำเช่นเวชระเบียนส่วนตัว แต่ฐานข้อมูลปริมาณสูงเป็นอย่างไร blockchain คืออะไร Blockchains พึ่งพาการเข้ารหัสเพื่อให้คอมพิวเตอร์สามารถทำการเปลี่ยนแปลงบันทึกทั่วโลกโดยไม่จำเป็นต้องมีนักแสดงกลาง การลบคนกลางลดค่าใช้จ่ายในเกือบทุกภาค blockchain เป็นบัญชีแยกประเภทที่บันทึกทุกอย่างที่เกิดขึ้นกับการรวบรวมข้อมูลที่เรียกว่า "บล็อก" ตามลำดับเวลาหรือ "ห่วงโซ่" ในฐานะที่เป็นสกุลเงินนี่เป็นคุณสมบัติที่สำคัญเพราะช่วยให้ผู้ใช้มั่นใจได้ว่าเงินดิจิทัลของพวกเขาเป็นหนึ่งในวิธีเดียวกันทุกครั้งในกระเป๋าเงินของคุณจะไม่ซ้ำกัน “ เทคโนโลยี Blockchain เป็นวิธีที่เราสร้างสินทรัพย์เพราะจะช่วยให้คุณถ่ายโอนข้อมูลดิจิตอลโดยไม่ต้องคัดลอก” Adam Ludwin หัวหน้าผู้บริหารของ Chain.com กล่าวซึ่งสร้างเครือข่ายบล็อกเชน Blockchain สามารถใช้เพื่อติดตามประวัติของข้อมูลทุกประเภทและรักษาคุณค่าของมันตัวอย่างเช่นแพทย์สามารถใช้มันเพื่ออัพเดทเวชระเบียน เนื่องจากการเปลี่ยนแปลงแต่ละครั้งใน blockchain นั้นเกิดขึ้นพร้อมกันในเครือข่ายทั้งหมดจึงไม่มีข้อมูลสูญหายและเนื่องจากการเปลี่ยนแปลงไม่สามารถยกเลิกได้ระบบจะรักษาความโปร่งใส จำเป็นต้องใช้คีย์พิเศษในการเปลี่ยนแปลงแต่ละบล็อกเพื่อให้บุคคลสามารถเก็บบันทึกของพวกเขาปลอดภัยโดยการปกป้องคีย์นั้น

4
การจัดเก็บเส้นทางรถบัสในฐานข้อมูล
ฉันได้ทำการวิจัยแล้วและพบว่าฉันควรจัดเก็บเส้นทางตามลำดับจุดแวะพัก สิ่งที่ต้องการ: Start -> Stop A -> Stop B -> Stop C -> End ฉันสร้างสามตาราง: เส้นทาง หยุด RouteStops ... โดยที่RouteStopsเป็นตารางจุดแยก ฉันมีสิ่งที่ชอบ: เส้นทาง +---------+ | routeId | +---------+ | 1 | +---------+ | 2 | +---------+ สถานี +-----------+------+ | stationId | Name | +-----------+------+ | 1 | A | +-----------+------+ | …

2
หลายต่อหลายและอ่อนแอ
ฉันมีนิติบุคคลที่ไม่สามารถอยู่ได้โดยไม่ถูกกำหนดโดยอีกและฉันต้องการให้นิติบุคคลนี้มีส่วนร่วมในความสัมพันธ์แบบกลุ่มต่อกลุ่ม ตัวอย่าง: ศิลปินมีอัลบั้ม (อัลบั้มไม่มีอยู่โดยไม่มีศิลปิน) อัลบั้มมีหลายแทร็ก แต่แทร็กเดียวกันสามารถมีอยู่ได้ในหลายอัลบั้ม ดังนั้นเราจึงมีความสัมพันธ์แบบหลายต่อหลายคนระหว่างอัลบั้มและแทร็ก หากอัลบั้มเป็นเอนทิตีอ่อน ๆ คีย์หลักของมันคือคีย์ต่างประเทศที่อ้างอิงศิลปินดังนั้นจึงไม่สามารถเป็นคีย์ต่างประเทศไปยังตารางอื่นที่แสดงถึงความสัมพันธ์แบบหลายต่อหลายกลุ่ม คำถามคือ: เป็นไปได้หรือไม่ที่จะมีความสัมพันธ์เช่นนี้ใน SQL และหากเป็นเช่นนั้นฉันจะแสดงได้อย่างไร

6
การทำให้ฐานข้อมูลเป็นปกติอยู่หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน6 ปีที่ผ่านมา ฉันได้รับการเลี้ยงดูโรงเรียนเก่า - ที่เราเรียนรู้การออกแบบสคีมาฐานข้อมูลก่อนที่ชั้นธุรกิจของแอปพลิเคชัน (หรือใช้ OOAD สำหรับทุกอย่างอื่น) ฉันค่อนข้างดีกับการออกแบบ schemas (IMHO :) และปรับให้เป็นมาตรฐานเท่านั้นเพื่อลบความซ้ำซ้อนที่ไม่จำเป็นออกไป แต่ส่วนใหญ่มันไม่ใช่ ด้วยการถือกำเนิดของกรอบ ORM บางอย่างเช่น Ruby ActiveRecord หรือ ActiveJDBC (และอีกไม่กี่ฉันจำไม่ได้ แต่ฉันแน่ใจว่ามีมากมาย) ดูเหมือนว่าพวกเขาชอบที่จะมีคีย์ตัวแทนสำหรับทุกตารางแม้ว่าบางคนมีคีย์หลักเช่น 'email' - ทำลาย 2NF เอาล่ะ โอเคฉันเข้าใจไม่มากเกินไป แต่มันก็เกิดขึ้นในประสาทของฉัน (เกือบ) เมื่อ ORM เหล่านี้ (หรือโปรแกรมเมอร์) บางคนไม่ยอมรับ 1-1 หรือ 1-0 | 1 (เช่น 1 ถึง …

7
การออกแบบตารางแบบใดที่เหมาะกับประสิทธิภาพมากที่สุด
ฉันถูกขอให้สร้างบางสิ่งบางอย่างซึ่งติดตามค่าใช้จ่ายรายวันเพื่อรวบรวมในบัญชีและฉันกำลังพยายามหาสคีมาตารางฐานข้อมูลที่จะสนับสนุนสิ่งนี้ นี่คือสิ่งที่ฉันรู้ บริษัท มีบัญชีมากกว่า 2.5 ล้านบัญชี ในบรรดาเหล่านี้พวกเขาทำงานเฉลี่ย 200,000 ต่อเดือน (การเปลี่ยนแปลงที่มีระดับพนักงานซึ่งปัจจุบันอยู่ในระดับต่ำ) พวกเขามีประเภทค่าใช้จ่ายที่แตกต่างกัน 13 แบบที่พวกเขาต้องการติดตามและพวกเขาได้เตือนว่าพวกเขาอาจเพิ่มมากขึ้นในอนาคต พวกเขาต้องการค่าใช้จ่ายในการติดตามรายวัน ค่าใช้จ่ายจะไม่แยกระหว่างสินค้าคงคลังทั้งหมด พวกเขาจะแยกตาม # ของบัญชีที่ทำงานต่อเดือน (200,000) หรือผู้ใช้สามารถป้อนตัวระบุบัญชีเพื่อใช้ค่าใช้จ่ายกับกลุ่มบัญชีหรือพวกเขาสามารถระบุบัญชีที่จะใช้ค่าใช้จ่าย ความคิดแรกของฉันคือฐานข้อมูลปกติ: หมายเลขบัญชี วันที่ CostTypeId จำนวน ปัญหาของฉันคือสิ่งนี้ทำคณิตศาสตร์ ตารางนี้จะใหญ่ขึ้นอย่างรวดเร็ว สมมติว่ามีการคิดค่าใช้จ่ายทั้งหมด 13 ประเภทสำหรับบัญชีที่ทำงานทั้งหมดสำหรับเดือนปัจจุบันนั่น200k * 13 * N days in monthคือที่ ๆ ประมาณ 75-80 ล้านระเบียนต่อเดือนหรือใกล้เคียงกับหนึ่งพันล้านรายการต่อปี ความคิดที่สองของฉันคือการทำให้เป็นปกติเล็กน้อย หมายเลขบัญชี วันที่ ค่าใช้จ่ายทั้งหมด CostType1 CostType2 CostType3 CostType4 CostType5 …

2
วิธีที่ดีที่สุดในการออกแบบฐานข้อมูลและตารางเพื่อเก็บบันทึกการเปลี่ยนแปลง?
ฉันต้องตั้งค่าคุณลักษณะประวัติในโครงการเพื่อติดตามการเปลี่ยนแปลงก่อนหน้านี้ สมมติว่าฉันมีสองตารางตอนนี้: NOTES TABLE (id, userid, submissionid, message) SUBMISSIONS TABLE (id, name, userid, filepath) ตัวอย่าง:ฉันมีแถวในบันทึกย่อและผู้ใช้ต้องการเปลี่ยนข้อความ ฉันต้องการติดตามสถานะก่อนการเปลี่ยนแปลงและหลังการเปลี่ยนแปลง อะไรจะเป็นวิธีที่ดีที่สุดในการตั้งค่าคอลัมน์ในแต่ละตารางเหล่านี้ซึ่งจะบอกว่ารายการนั้นเป็นรายการ "เก่า" 0 ถ้าใช้งานอยู่หรือ 1 ถ้าถูกลบ / มองไม่เห็น ฉันยังต้องการสร้างAUDIT TRAILตารางhistory ( ) ซึ่งเก็บidสถานะก่อนหน้าidของสถานะใหม่ซึ่งตารางนี้ id เหล่านั้นเกี่ยวข้องกับอะไร

2
คอลัมน์ null อาจเป็นส่วนหนึ่งของคีย์หลักได้หรือไม่
ฉันกำลังพัฒนาฐานข้อมูล SQL Server 2012 และฉันมีคำถามเกี่ยวกับความสัมพันธ์แบบหนึ่งต่อศูนย์หรือหนึ่งวัน ฉันมีสองตารางและCodes HelperCodesรหัสอาจมีรหัสศูนย์หรือหนึ่งตัวช่วย นี่คือสคริปต์ sql เพื่อสร้างสองตารางและความสัมพันธ์: CREATE TABLE [dbo].[Code] ( [Id] NVARCHAR(20) NOT NULL, [Level] TINYINT NOT NULL, [CommissioningFlag] TINYINT NOT NULL, [SentToRanger] BIT NOT NULL DEFAULT 0, [LastChange] NVARCHAR(50) NOT NULL, [UserName] NVARCHAR(50) NOT NULL, [Source] NVARCHAR(50) NOT NULL, [Reason] NVARCHAR(200) NULL, [HelperCodeId] NVARCHAR(20) NULL, …

3
การใช้ระบบการกำหนดเวอร์ชันด้วย MySQL
ฉันรู้ว่าสิ่งนี้ถูกถามที่นี่และที่นี่แต่ฉันมีความคิดเดียวกันกับการใช้งานที่เป็นไปได้ที่แตกต่างกันและฉันต้องการความช่วยเหลือ ตอนแรกฉันมีblogstoriesตารางที่มีโครงสร้างนี้: | Column | Type | Description | |-----------|-------------|------------------------------------------------| | uid | varchar(15) | 15 characters unique generated id | | title | varchar(60) | story title | | content | longtext | story content | | author | varchar(10) | id of the user that originally wrote the …

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