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

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

3
การสร้างแบบจำลองสถานการณ์ที่ศิลปินเพลงแต่ละคนเป็นกลุ่มหรือนักดนตรีเดี่ยว
ฉันต้องออกแบบแผนภาพความสัมพันธ์เอนทิตี (ERD) สำหรับบริบททางธุรกิจที่เกี่ยวข้องกับการแบ่งศิลปินเพลงเพราะฉันจะให้รายละเอียดด้านล่าง คำอธิบายสถานการณ์ ศิลปินมีชื่อและต้องเป็นอย่างใดอย่างหนึ่งกลุ่ม หรือดนตรีเดี่ยว ( แต่ไม่ทั้งสอง) กลุ่มถูกสร้างขึ้นจากหนึ่งหรือมากกว่านักแสดงคนเดียวและมีจำนวนสมาชิก (ซึ่งควรจะคำนวณจากจำนวนที่แสดงเดี่ยวทำขึ้นกลุ่ม ) Solo Performerอาจจะเป็นสมาชิกของหลายกลุ่มหรือไม่กลุ่มและอาจจะเล่นหนึ่งหรือมากกว่าเครื่องดนตรี คำถาม วิธีการสร้าง ERD เพื่อเป็นตัวแทนของสถานการณ์ดังกล่าว? ฉันสับสนกับส่วน 'หรือ' ของมัน

1
การจัดเก็บและการสืบค้นข้อมูลการกลิ้งใน PostgreSQL
ฉันมีข้อมูลโมเดลสภาพอากาศจำนวนมากถูกใส่ลงในฐานข้อมูล PostgreSQL เครื่องมี 8 คอร์และ RAM 16 GB ฉันใช้ PostgreSQL 9.3 กับ PostGIS 2.1 แต่ละตารางจะมีข้อมูลสภาพอากาศที่แตกต่างกัน (อุณหภูมิจุดน้ำค้างลม ฯลฯ ) แต่ละตารางจะมีคอลัมน์ 6-7 คอลัมน์: ละติจูดลองจิจูดลองจิจูดเรขาคณิตระดับความสูงวันที่และเวลาที่แบบจำลองนั้นเกี่ยวข้องและค่าข้อมูลที่น่าสนใจ 1-2 รายการ ข้อมูลจะถูกสอบถามเป็นหลักสำหรับกล่อง bounding ตามเวลาและระดับความสูง จะมีประมาณ 145,757,360 แถวต่อตาราง (ข้อมูลที่เก่ากว่าตอนนี้จะไม่ถูกลบอีกต่อไป) ฉันประมาณขนาดของตารางโดยประมาณประมาณ 10 GB โดยไม่มีดัชนี (นั่นคือข้อมูล 52 ไบต์บวก 23 ไบต์ค่าใช้จ่ายต่อแถว) ข้อมูลจะถูกอัปเดต / แทรกเป็นประจำเมื่อมีข้อมูลโมเดลใหม่ บันทึก: ดังนั้นฉันดูที่แผนสองข้อนี้: เพียงจัดทำดัชนีและจัดกลุ่มตาม (วันที่และเวลา, ระดับความสูง) พร้อมดัชนีเพิ่มเติมสำหรับรูปทรงเรขาคณิตของจุด รันงาน …

3
ตารางบันทึกควรได้รับช่อง id หรือคีย์หลักหรือไม่
ฉันมีตารางบันทึกที่รวบรวมการประทับวันที่และเวลาเมื่อไฟล์บางไฟล์ถูกส่งออกไปยังระบบอื่น ตาราง exportLog ปัจจุบันมีสามฟิลด์: id (primary key) messageId (int) exportedDateTime (datetime) จากการตรวจสอบนี้ฉันพบว่าidฟิลด์นี้ไม่มีจุดประสงค์เนื่องจากไม่มีการเชื่อมต่อกับตารางนี้ สิ่งเดียวที่ทำงานในตารางนี้คือการแทรกของชุดงานที่ประมวลผลข้อความและแทรกลงในตารางบันทึกนี้ ฉันควรลบidฟิลด์หรือไม่ ฉันควรจะมีคีย์หลักในการอย่างใดอย่างหนึ่งmessageIdหรือexportedDateTimeหรือทั้งสอง?

2
ฉันควรสร้างแบบจำลองความสัมพันธ์“ หรือ /” อย่างไร
ว่าฉันมีนิติบุคคลชื่อ Software และสองประเภทย่อย FreeSoftware และ NonFreeSoftware เอนทิตี NonFreeSoftware มีคุณสมบัติเช่นวันที่ซื้อ, ผู้ขาย, ฯลฯ เอนทิตี FreeSoftware มีคุณสมบัติเช่นใบอนุญาต, URL ของซอร์สโค้ดเป็นต้น ดังนั้นหากฉันต้องการสร้างแบบจำลองเอนทิตีอื่นระบบปฏิบัติการฉันควรทำอย่างไร? มีความสัมพันธ์แบบ "เป็น" กับซอฟต์แวร์ แต่ความสัมพันธ์แบบ "หรือ" กับ FreeSoftware และ NonFreeSoftware ฉันคิดว่าฉันขาดอะไรบางอย่างในแบบที่ฉันวิเคราะห์ลำดับชั้นนี้

2
ความสัมพันธ์แบบหนึ่งต่อหนึ่งเป็นมาตรฐานหรือไม่
พิจารณาว่าเรามีชุดข้อมูลสถิติขนาดใหญ่สำหรับบันทึก เช่น 20-30 INTคอลัมน์ มันจะดีกว่าหรือไม่ที่จะเก็บทั้งชุดไว้ในตารางเดียวเนื่องจากทั้งหมดนั้นเป็นของระเบียนหรือสร้างตารางอื่นที่เชื่อมโยงกับความสัมพันธ์แบบหนึ่งต่อหนึ่ง ข้อได้เปรียบของอดีตคือการหลีกเลี่ยงJOINและเข้าถึงข้อมูลสถิติทั้งหมดสำหรับบันทึกที่เกี่ยวข้องได้อย่างรวดเร็ว ข้อได้เปรียบของหลังคือการทำให้คอลัมน์เป็นระเบียบ คอลัมน์แรกนั้นเป็นแบบอ่านอย่างละเอียดและแบบที่สองเป็นแบบเขียนมาก แน่นอนฉันคิดว่ามันไม่มีผลกระทบอย่างมีนัยสำคัญต่อประสิทธิภาพเนื่องจากฉันใช้ InnoDB กับการบล็อกระดับแถว โดยทั่วไปฉันต้องการทราบว่าเป็นประโยชน์หรือไม่ในการแยกชุดข้อมูลที่แตกต่างกันสำหรับบันทึกเดียว?

3
ทำไมฉันไม่ควรมีตารางหนึ่งตารางสำหรับความสัมพันธ์หลาย ๆ
สมมติว่าฉันมีความสัมพันธ์หลายอย่างในฐานข้อมูลของฉันเช่นร้านค้าพนักงานและการขายและฉันต้องการเชื่อมต่อคู่กับความสัมพันธ์แบบไบนารีที่เรียบง่าย ส่วนตัวฉันจะสร้างตารางชื่อ Employee_Store และ Employee_Sale ด้วยคีย์ธรรมชาติที่ประกอบด้วยคีย์ต่างประเทศ ตอนนี้เพื่อนร่วมงานของฉันยืนยันในการสร้างหนึ่งตารางสำหรับความสัมพันธ์ที่หลากหลาย สำหรับตัวอย่างข้างต้นอาจมีตารางชื่อ EmployeeLinks: EmployeeLinks( IdLink int PK, IdEmployee int FK null, IdStore int FK null, IdSale int FK null, LinkType int not null ) โปรดช่วยฉันด้วยเหตุผลที่ดีว่าทำไมจึงไม่ใช่ความคิดที่ดี ฉันมีข้อโต้แย้งของฉันเอง แต่ฉันต้องการให้พวกเขาเป็นส่วนตัวและรับฟังความคิดเห็นที่ไม่ลำเอียงของคุณ แก้ไข: เริ่มแรกตารางข้างต้นจะไม่มีคีย์หลัก (!) เนื่องจากคีย์ต่างประเทศอนุญาตให้ null คีย์ตัวแทนเป็นตัวเลือกเดียว

5
มีระบบจัดการฐานข้อมูลแบบโอเพ่นซอร์สหรือไม่ [ปิด]
ปิด. คำถามนี้เป็นคำถามปิดหัวข้อ ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้เป็นหัวข้อสำหรับผู้ดูแลฐานข้อมูล Exchange Exchange ปิดให้บริการในวันที่ 11 เดือนที่ผ่านมา ฉันกำลังมองหาระบบการจัดการฐานข้อมูลแบบลำดับชั้นและมีเพียงระบบเดียวที่ฉันเจอคือ IBM's ims.ArthEdge มีระบบโอเพ่นซอร์สที่สามารถใช้งานได้หรือไม่

3
ข้อผิดพลาดขนาดดัชนีสูงสุดของแถว
มีขอบเขตบนสำหรับarrayคอลัมน์หรือไม่? ฉันได้รับข้อผิดพลาดนี้เมื่อแทรกเข้าไปในฟิลด์อาร์เรย์ - PG::Error: ERROR: index row size 3480 exceeds maximum 2712 for index "ix_data" นี่คือคำนิยามตารางของฉัน - create table test_array(id varchar(50), data text[]); ALTER TABLE test_array ADD PRIMARY KEY (id); CREATE INDEX ix_data ON test_array USING GIN (data); ฉันต้องการดัชนีในฟิลด์อาร์เรย์เนื่องจากฉันกำลังทำการค้นหาบางอย่างกับมัน

4
ลำดับของคอลัมน์ในดัชนี columnstore สำคัญหรือไม่
ฉันมีตารางที่มี ~ 200 ล้านแถวและอีก 15 คอลัมน์ในนั้น ฉันวางแผนที่จะสร้างCOLUMNSTOREดัชนีบนโต๊ะของฉัน จะมีการเปลี่ยนแปลงใด ๆ เกี่ยวกับประสิทธิภาพขึ้นอยู่กับลำดับของคอลัมน์ที่ฉันใช้ในดัชนี columnstore หรือไม่ ถ้าใช่ตรรกะอะไรที่อยู่เบื้องหลัง

2
ฐานข้อมูลสำหรับการค้นหารวมช่วงที่มีประสิทธิภาพ?
เป็นตัวอย่างแบบง่ายสมมติว่าฉันมีตารางเช่นนี้ seq | value ----+------ 102 | 11954 211 | 43292 278 | 19222 499 | 3843 ตารางอาจมีหลายร้อยล้านระเบียนและฉันต้องทำแบบสอบถามบ่อยเช่นนี้: SELECT sum(value) WHERE seq > $a and seq < $b แม้ว่าseqจะมีการจัดทำดัชนีการใช้ฐานข้อมูลทั่วไปจะวนซ้ำแต่ละแถวเพื่อคำนวณผลรวมในกรณีที่ดีที่สุดO(n)โดยที่nขนาดของช่วงนั้นอยู่ที่ใด มีฐานข้อมูลใดบ้างที่สามารถทำได้อย่างมีประสิทธิภาพเช่นเดียวกับในO(log(n))แบบสอบถามต่อ? ฉันได้เจอโครงสร้างข้อมูลที่เรียกว่า Segment ต้นไม้ตามที่อธิบายไว้ที่นี่ บางครั้งก็เรียกว่าช่วงต้นไม้หรือช่วงต้นไม้แม้ว่าชื่อเหล่านี้มักจะอธิบายว่าเป็นรูปแบบที่แตกต่างกันเล็กน้อยของโครงสร้างข้อมูล อย่างไรก็ตามฉันยังไม่เจอฐานข้อมูลใด ๆ ที่ใช้โครงสร้างข้อมูลดังกล่าว การนำไปใช้ตั้งแต่เริ่มต้นนั้นเป็นเรื่องง่ายสำหรับโครงสร้างในหน่วยความจำ แต่จะยุ่งยากหากต้องคงไว้หรือมีขนาดใหญ่เกินไปที่จะใส่ลงในหน่วยความจำ หากมีรูปแบบที่มีประสิทธิภาพสำหรับการนำไปใช้งานด้านบนของฐานข้อมูลที่มีอยู่นั่นอาจช่วยได้เช่นกัน หมายเหตุด้านข้าง: นี่ไม่ใช่ตารางต่อท้ายเท่านั้นดังนั้นโซลูชันเช่นการรักษายอดรวมสะสมจะไม่ทำงานในกรณีนี้

2
วิธีสร้างแบบจำลองประเภทเอนทิตีที่สามารถมีชุดคุณสมบัติที่แตกต่างกันได้อย่างไร
ฉันมีปัญหาบางอย่างในการสร้างฐานข้อมูลที่มีอย่างใดอย่างหนึ่งต่อหลาย (1: M) ความสัมพันธ์ระหว่างผู้ใช้และรายการ ตรงไปตรงมานี้ใช่ อย่างไรก็ตามแต่ละรายการเป็นของบางประเภท (เช่นรถเป็นเรือหรือเครื่องบิน ) และแต่ละประเภทมีจำนวนโดยเฉพาะอย่างยิ่งของคุณลักษณะเช่น: Car โครงสร้าง: +----+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | +----+--------------+--------------+ Boat โครงสร้าง: +----+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | Attribute #3 | +----+--------------+--------------+--------------+ Plane โครงสร้าง: +----+--------------+--------------+--------------+--------------+ | PK | Attribute #1 | Attribute #2 | …

2
แนวความคิด ERD หลายโต๊ะหลายคนหรืออาจจะวนซ้ำ?
ฉันกำลังสร้างไดอะแกรมเชิงแนวคิด [ใช่ฉันรู้ว่าฉันได้รวมคุณลักษณะและปุ่ม - แต่นี่เป็นเพียงสำหรับฉันที่จะรวมสิ่งที่ฉันทำในขณะที่เรียนรู้] - ดังนั้นโปรดรักษามันเป็นแนวคิดด้วยการมุ่งเน้นที่ความสัมพันธ์และ ตารางและไม่ใช่วิธีไดอะแกรม;) สิ่งกีดขวางในใจของฉันคือ: ฉันพยายามที่จะหาวิธีที่ดีที่สุดในการสร้างแบบจำลองความสัมพันธ์ส่วนตัวที่ตั้งและองค์กร ก่อนอื่นกฎ: หนึ่งหรือมากกว่าส่วนตัว 's สามารถเป็นสมาชิก / เพื่อนของหนึ่งหรือมากกว่าองค์กร ; และในทางกลับกัน. โปรไฟล์อย่างน้อยหนึ่งรายการสามารถเป็นสมาชิก / เพื่อนของโปรไฟล์อื่น ๆ องค์กรอย่างน้อยหนึ่งแห่งสามารถเป็นสมาชิก / เพื่อนขององค์กรอื่น ๆ ได้ เพื่อนและสมาชิกแตกต่างกันในการที่เพื่อนเป็นแบบอ่านอย่างเดียวและสมาชิก [ขึ้นอยู่กับระดับ] สามารถเข้าถึงสิ่งที่แก้ไขได้อย่างเต็มที่ เพื่อให้สิ่งต่าง ๆ ซับซ้อนขึ้นสถานที่ตั้งมีกฎการรีฟิล "เพิ่มเติม" ของตนเองเช่นองค์กรที่เป็นเจ้าของสองสถานที่แต่ขึ้นอยู่กับกฎที่ตั้งสมาชิก [ โปรไฟล์ ] ขององค์กรนั้นอาจเข้าถึงได้อย่างเต็มที่ในที่เดียว แต่ จำกัด การเข้าถึงที่ อื่น ๆ [ขออภัย: คุณมักจะต้องเปิดภาพในหน้าต่างอื่นเพื่อดูขนาดที่ดีขึ้น] ดังนั้นอย่างที่คุณเห็นแนวคิดของโปรไฟล์และองค์กรนั้นเหมือนกันเช่นเดียวกับแนวคิดที่ยังไม่ได้เป็นแบบอย่างของเพื่อนและสมาชิก [... ซึ่งฉันคิดว่าจะได้รับการจัดการเหมือนตารางตัวกลางปัจจุบันที่มีการตั้งค่าเจ้าของ / ผู้ดูแลระบบ …

2
การจัดเก็บที่อยู่ IP - varchar (45) vs varbinary (16)
ฉันจะสร้างตารางที่มีสองช่อง - IDเป็นBIGINTและIPAddressเป็นอย่างใดอย่างหนึ่งหรือvarchar(45) varbinary(16)แนวคิดคือการจัดเก็บที่อยู่ IP ที่ไม่ซ้ำกันทั้งหมดและใช้การอ้างอิงIDแทนจริงIP addressในตารางอื่น ๆ โดยทั่วไปฉันจะสร้างการจัดเก็บที่กลับมาIDสำหรับการรับIP addressหรือ (ถ้าอยู่ไม่พบ) IDแทรกอยู่และกลับที่สร้างขึ้น ฉันคาดหวังว่าจะมีบันทึกจำนวนมาก (ฉันไม่สามารถบอกได้อย่างชัดเจนว่ามีจำนวนเท่าใด) แต่ฉันต้องการขั้นตอนการจัดเก็บด้านบนเพื่อดำเนินการโดยเร็วที่สุด ดังนั้นฉันจึงสงสัยว่าจะเก็บที่อยู่ IP จริงไว้อย่างไรในรูปแบบข้อความหรือไบต์ อันไหนจะดีกว่ากัน? ฉันได้เขียนSQL CLRฟังก์ชันสำหรับแปลงที่อยู่ IP เป็นสตริงและย้อนกลับดังนั้นการแปลงจึงไม่ใช่ปัญหา (ทำงานกับทั้งสองIPv4และIPv6) ฉันเดาว่าฉันต้องสร้างดัชนีเพื่อปรับการค้นหาให้เหมาะสม แต่ฉันไม่แน่ใจว่าฉันควรรวมIP addressฟิลด์ไว้ในดัชนีกลุ่มหรือเพื่อสร้างดัชนีแยกต่างหากและการค้นหาประเภทใดจะเร็วขึ้น

2
ฉันควรเพิ่มคีย์ต่างประเทศสกรรมกริยาหรือไม่
ตัวอย่างง่ายๆ: มีตารางลูกค้า create table Customers ( id integer, constraint CustomersPK primary key (id) ) ข้อมูลอื่น ๆ ทั้งหมดในฐานข้อมูลควรเชื่อมโยงไปยัง a Customerดังนั้นเช่นOrdersจะมีลักษณะดังนี้: create table Orders ( id integer, customer integer, constraint OrdersPK primary key (customer, id), constraint OrdersFKCustomers foreign key (customer) references Customers (id) ) สมมติว่าตอนนี้มีตารางเชื่อมโยงไปยังOrders: create table Items ( id integer, customer …

1
ความถูกต้องชั่วคราวและความสัมพันธ์หลัก / ต่างประเทศที่สำคัญ
ฉันได้อ่านบทเรียนเกี่ยวกับ oracle หลายตัวที่แสดงถึงความถูกต้องทางเวลาและคุณสมบัติ อย่างไรก็ตามในตัวอย่างที่ฉันอ่านไม่มีคีย์หลักที่ใช้ในตารางตัวอย่าง http://docs.oracle.com/cd/E16655_01/appdev.121/e17620/adfns_design.htm#ADFNS1005 http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/12c/r1/ilm /temporal/temporal.html ควรเพิ่มคีย์หลักในตารางเหล่านี้หรือไม่ ฉันกำลังถามเพราะฉันสงสัยว่าตารางอ้างอิงหนึ่งในตารางชั่วคราวเหล่านี้ควรจะอ้างอิงได้อย่างไร ฉันสามารถเพิ่มคีย์ต่างประเทศจากตารางชั่วคราวหนึ่งไปยังอีกตารางหนึ่งได้หรือไม่ ถ้าฉันเพิ่ม pk / foreign key realtionship จากนั้นอัปเดตการอ้างอิงในตารางด้วย pk ตารางที่มีจุด fk ไปยังระเบียนที่ไม่เกี่ยวข้องอีกต่อไป .... ข้อมูลทางโลกแตกคีย์หลักปกติปกติ - foreign key ความสัมพันธ์? และถ้าเป็นเช่นนั้นสิ่งนี้มีผลต่อประสิทธิภาพอย่างไรฉันจะใช้คอลัมน์ปกติเป็น 'foreign key' และเลือกคอลัมน์ที่ถูกต้องสำหรับช่วงเวลาอ้างอิงในแบบสอบถาม ไม่มีใครรู้หรือมีตัวอย่างหรือแบบฝึกหัดที่มีประโยชน์ซึ่งแสดงข้อมูลชั่วคราวด้วยการใช้ pk / fk แบบหลอกหรือปกติ? ขอบคุณ

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