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

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

1
ทางเลือกของวิธีการรับรองความถูกต้องสำหรับแอพทางการเงินใน PostgreSQL
ก่อนอื่นให้พื้นหลัง โครงการ LedgerSMB เป็นโครงการซอฟต์แวร์บัญชีการเงินที่ทำงานบน PostgreSQL เราใช้ตรรกะทางธุรกิจจำนวนมากในฟังก์ชั่นที่ผู้ใช้กำหนดซึ่งทำหน้าที่เป็นเครื่องมือการแมปหลักระหว่างวิธีการวัตถุของโปรแกรมและพฤติกรรมฐานข้อมูล ขณะนี้เราใช้ผู้ใช้ฐานข้อมูลเป็นผู้ใช้การพิสูจน์ตัวตนส่วนหนึ่งเป็นตัวเลือก (สิ่งนี้อนุญาตให้ตรรกะความปลอดภัยส่วนกลางเพื่อให้เครื่องมืออื่น ๆ สามารถเขียนและใช้สิทธิ์ที่ให้แก่ผู้ใช้) และอีกส่วนตามความจำเป็น (หลังจากเราแยกจาก SQL-Ledger ไม่มีตัวเลือกมากมายสำหรับการปรับเปลี่ยนการรักษาความปลอดภัยไปยัง codebase นั้น) วิธีนี้ทำให้เราสามารถเข้าถึงตัวเลือกการลงชื่อเข้าใช้เพียงครั้งเดียวที่ PostgreSQL สามารถเข้าถึงได้ตั้งแต่ LDAP ไปจนถึง Kerberos 5. เราสามารถใช้ PAM ที่เกี่ยวข้องกับรหัสผ่าน นอกจากนี้ยังช่วยให้เราสามารถใช้สิทธิ์อีกครั้งเมื่อรวมกับแอปพลิเคชันอื่นหรืออนุญาตให้ส่วนต่อประสานลูกค้าอื่น ๆ สำหรับแอปพลิเคชันการบัญชีการเงินดูเหมือนว่าจะชนะสุทธิ มีค่าใช้จ่ายที่เกี่ยวข้องอย่างชัดเจน สำหรับเว็บแอปพลิเคชันเรา จำกัด ประเภท http auth ที่สามารถรองรับได้มาก ตัวอย่างเช่น DIGEST นั้นหมดไปแล้ว การทำงานพื้นฐานและเราสามารถใช้ KRB5 ได้ง่ายพอ (ฉันวางแผนว่าจะให้การสนับสนุนและทำงานนอกกรอบสำหรับ 1.4) มาตรการการรับรองความถูกต้องที่แข็งแกร่งมากไม่สามารถจัดการได้อย่างถูกต้องโดยตรงแม้ว่าเราอาจจะสามารถกำหนดมาตรการเหล่านี้ได้ในกรณีที่จำเป็น (ตัวอย่างเช่นใบรับรอง SSL BASIC + ฝั่งไคลเอ็นต์ที่มี …

2
การออกแบบโมดูลการควบคุมอัตโนมัติของผู้ใช้ (บทบาทและสิทธิ์)
ฉันพยายามสร้างโมเดลโมดูลการพิสูจน์ตัวตนผู้ใช้สำหรับฐานข้อมูล MS SQL Server ที่จะเป็นแบ็คเอนด์ไปยังแอปพลิเคชัน Delphi UI โดยทั่วไปฉันต้องการมีบัญชีผู้ใช้ที่ผู้ใช้อยู่ในกลุ่มเดียวเท่านั้น กลุ่มสามารถมีจำนวนสิทธิ์ "n" ฉันต้องการเพิ่มประวัติรหัสผ่านในฐานข้อมูลเนื่องจากผู้ใช้จะต้องเปลี่ยนรหัสผ่านตามการตั้งค่าแอปพลิเคชัน (ตัวอย่างเช่นทุก ๆ 90 วัน) ฉันต้องการบันทึกกิจกรรมในแต่ละครั้งที่ผู้ใช้ลงชื่อเข้าและออก ฉันอาจขยายสิ่งนี้ไปยังกิจกรรมเพิ่มเติมในอนาคต ด้านล่างคุณจะพบรอยแตกครั้งแรกของฉันที่มัน โปรดแจ้งให้ฉันทราบข้อเสนอแนะเพื่อปรับปรุงตามนี้เป็นครั้งแรกของฉันทำเช่นนี้ คุณเห็นความต้องการคุณลักษณะเพิ่มเติมสำหรับการรักษาความปลอดภัยตามบทบาทและข้อ จำกัด สำหรับกฎรหัสผ่าน / รอบระยะเวลาหมดอายุหรือไม่?

4
การเปิดและปิดการเชื่อมต่อฐานข้อมูลมีค่าใช้จ่ายเท่าใด
ซีพียูเข้มข้นเปิดและปิดการเชื่อมต่อฐานข้อมูล (สำหรับเว็บแอป) ใน MySQL อย่างไร ... เมื่อซอฟต์แวร์ DB อยู่บน localhost ... เมื่อซอฟต์แวร์ DB อยู่ในเครื่องอื่น

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

2
การออกแบบฐานข้อมูลแบบสอบถาม - วิธีไหนดีกว่ากัน
ฉันมีหน้า html ยาวหนึ่งหน้าชุดคำถามหลายชุดแบ่งออกเป็นส่วนเล็ก ๆ (ประมาณ 15 ส่วนย่อยในหน้าเดียว) คำถามทั้งหมดมีประมาณ 100 คำถาม: แตกต่างกันไปจากอินพุตตัวเลือกหลายตัวเลือกช่องทำเครื่องหมายปุ่มตัวเลือกข้อความ และอัพโหลดไฟล์ คำถามหนึ่งข้ออาจมีคำตอบมากมายซึ่งได้มาจากกลุ่มของช่องทำเครื่องหมายกลุ่มของรายการที่เลือกกลุ่มของหลายตัวเลือกหรือทั้งหมดรวมกันเป็นคำตอบเดียว ฉันคิดว่าฉันจะใช้การออกแบบฐานข้อมูลด้านล่าง แต่พบว่าเมื่อเร็ว ๆ นี้ว่ามันไม่ใช่วิธีการที่ดี ลูกค้าหนึ่งรายสามารถมีคำถามได้หนึ่งชุดเท่านั้น: ลูกค้าหนึ่งรายต่อคำถาม 100 ข้อ สำหรับวิธีเก่าฉันไม่เก็บคำถามในฐานข้อมูล แต่กำหนดเป็นค่าคงที่ในการเข้ารหัส PHP แทน ปัญหาคือฉันต้องเปรียบเทียบคำถามใน PHP เพื่อให้ตรงกับคำตอบในฐานข้อมูล หากคำถามหนึ่งมีการเปลี่ยนแปลง / ลบ / ย้ายจาก PHP ฉันจะหลงทางเพื่อให้ตรงกับคำตอบในฐานข้อมูลแบบสอบถาม ทางออกที่ดีกว่า ฉันสามารถเก็บหลายคำตอบที่ได้รับจากองค์ประกอบหลายอย่างในรูปแบบลงในฟิลด์เดียวเป็นคำตอบเดียว ฉันจะดึงข้อมูลนี้และแสดงมันอีกครั้งเพื่อให้ลูกค้าดูในแบบฟอร์มได้อย่างไร? ฉันควรเลือกตัวเลือกใดด้านล่างนี้ ตัวเลือก 1: วิธีการแบบเก่า (1 ตาราง) ตาราง: แบบสอบถาม ID (PK) รหัสลูกค้า สถานะ …

2
Schema-less / ยืดหยุ่น + ฐานข้อมูล ACID?
ฉันกำลังมองหาการเขียนโปรแกรมประยุกต์ VB แบบอิงตามสถานที่ (ติดตั้งในเครื่อง) (ใบแจ้งหนี้ + สินค้าคงคลัง) เป็นแอปพลิเคชัน Clojure บนเว็บสำหรับลูกค้าองค์กรขนาดเล็ก ฉันตั้งใจจะนำเสนอนี้เป็นแอปพลิเคชัน SaaS สำหรับลูกค้าในการค้าที่คล้ายกัน ฉันกำลังดูตัวเลือกฐานข้อมูล: ตัวเลือกของฉันคือ RDBMS: Postgresql / MySQL ฉันอาจขยายผู้ใช้มากถึง 400 คนในปีแรกโดยทั่วไปแล้วมีจำนวนการดู 20-40 หน้า / ต่อวันต่อผู้ใช้ส่วนใหญ่สำหรับธุรกรรมที่ไม่ใช่มุมมองแบบคงที่ แต่ละมุมมองจะเกี่ยวข้องกับการดึงข้อมูลและอัปเดตข้อมูล การปฏิบัติตามข้อกำหนดของกรดเป็นสิ่งที่จำเป็น (หรือฉันคิดว่า) ดังนั้นปริมาณธุรกรรมไม่มาก คงจะไม่มีเกมง่ายๆที่จะเลือกสิ่งเหล่านี้ตามความต้องการของฉัน แต่สำหรับข้อกำหนดนี้ซึ่งฉันเชื่อว่าเป็นเรื่องปกติของแอป SaaS: โครงสร้างจะเปลี่ยนแปลงเมื่อฉันเพิ่มลูกค้า / ผู้ใช้และลูกค้าแต่ละราย การเปลี่ยนแปลงความต้องการทางธุรกิจ (ฉันจะเสนอความยืดหยุ่นที่ จำกัด บางอย่างเท่านั้นเริ่มต้นด้วย) เนื่องจากฉันไม่ใช่ผู้เชี่ยวชาญฐานข้อมูลตามสิ่งที่ฉันคิดและอ่านได้ฉันจึงสามารถจัดการได้หลายวิธี: มีการออกแบบสคีมา RDBMS แบบดั้งเดิมใน MySQl / Postgresql ด้วยฐานข้อมูลเดียวที่โฮสต์ผู้เช่าหลายคน และเพิ่มคอลัมน์ "ลอยฟรี" …

1
ข้อ จำกัด ที่ไม่ซ้ำกับช่วงวันที่
พิจารณาpricesตารางที่มีคอลัมน์เหล่านี้: id integer primary key product_id integer -- foreign key start_date date not null end_date date not null quantity integer price numeric ฉันต้องการให้ฐานข้อมูลบังคับใช้กฎว่าผลิตภัณฑ์หนึ่ง ๆ สามารถมีราคาหนึ่งรายการในปริมาณเฉพาะในช่วงวันที่ (ผ่านwhere <date> BETWEEN start_date AND end_date) ข้อ จำกัด ประเภทนี้เป็นไปได้หรือไม่

1
ทำความเข้าใจกับระบบการแจ้งเตือน
ฉันค้นหาวิธีการสร้างระบบการแจ้งเตือนใน SE และที่อื่น ๆ และพบว่าตัวเองถูกดึงไปยังโซลูชันที่เป็นคำตอบที่ยอมรับได้ที่นี่: /programming/9735578/building-a-notification-system ซึ่งใช้ โครงสร้างนี้: ╔═════════════╗ ╔═══════════════════╗ ╔════════════════════╗ ║notification ║ ║notification_object║ ║notification_change ║ ╟─────────────╢ ╟───────────────────╢ ╟────────────────────╢ ║ID ║—1:n—→║ID ║—1:n—→║ID ║ ║userID ║ ║notificationID ║ ║notificationObjectID║ ╚═════════════╝ ║object ║ ║verb ║ ╚═══════════════════╝ ║actor ║ ╚════════════════════╝ การแจ้งเตือนเกี่ยวกับบางสิ่งบางอย่าง (object = event, มิตรภาพ .. ) กำลังถูกเปลี่ยนแปลง (กริยา = เพิ่ม, ขอ .. …

1
การแก้ไขโครงสร้างตารางเพื่อหลีกเลี่ยง `ข้อผิดพลาด: ค่าคีย์ที่ซ้ำกันละเมิดข้อ จำกัด ที่ไม่ซ้ำกัน '
ฉันมีตารางที่สร้างขึ้นด้วยวิธีนี้: -- -- Table: #__content -- CREATE TABLE "jos_content" ( "id" serial NOT NULL, "asset_id" bigint DEFAULT 0 NOT NULL, ... "xreference" varchar(50) DEFAULT '' NOT NULL, PRIMARY KEY ("id") ); ต่อมาบางแถวจะถูกแทรกโดยระบุรหัส: INSERT INTO "jos_content" VALUES (1,36,'About',...) ที่จุดภายหลังบางระเบียนจะถูกแทรกโดยไม่ต้อง ID Error: duplicate key value violates unique constraintและพวกเขาล้มเหลวกับข้อผิดพลาด: เห็นได้ชัดว่า id ได้รับการกำหนดเป็นลำดับ: การแทรกที่ล้มเหลวแต่ละครั้งจะเพิ่มตัวชี้ในลำดับจนกระทั่งมันเพิ่มขึ้นเป็นค่าที่ไม่มีอยู่อีกต่อไปและการสืบค้นสำเร็จ …

3
แยกคอลัมน์เดือนและปีหรือวันที่ที่มีวันตั้งเป็น 1 เสมอ
ฉันกำลังสร้างฐานข้อมูลด้วย Postgres ซึ่งจะมีการจัดกลุ่มของสิ่งต่าง ๆ มากมายโดยmonthและyearไม่เคยทำมาdateก่อน ฉันสามารถสร้างจำนวนเต็มmonthและyearคอลัมน์และใช้สิ่งเหล่านั้น หรือฉันอาจมีmonth_yearคอลัมน์และตั้งค่าเป็นday1 เสมอ อดีตดูเหมือนจะง่ายขึ้นเล็กน้อยและชัดเจนขึ้นถ้ามีคนดูข้อมูล แต่หลังนั้นดีในการใช้ประเภทที่เหมาะสม

2
แนวทางปฏิบัติที่ดีที่สุดเกี่ยวกับตารางการค้นหาในฐานข้อมูลเชิงสัมพันธ์คืออะไร
ตารางการค้นหา (หรือตารางรหัสตามที่บางคนเรียกพวกเขา) มักจะเป็นชุดของค่าที่เป็นไปได้ที่สามารถกำหนดสำหรับคอลัมน์ที่แน่นอน ตัวอย่างเช่นสมมติว่าเรามีตารางการค้นหาที่เรียกว่าparty(หมายถึงการเก็บข้อมูลเกี่ยวกับพรรคการเมือง) ที่มีสองคอลัมน์: party_code_idnซึ่งเก็บค่าตัวเลขที่ระบบสร้างขึ้นและ (ขาดความหมายโดเมนธุรกิจ ) ทำงานเป็นตัวแทนสำหรับคีย์จริง party_codeเป็นกุญแจจริงหรือ "ธรรมชาติ" ของตารางเนื่องจากจะรักษาค่าที่มีนัยยะของโดเมนธุรกิจ และให้เราบอกว่าตารางดังกล่าวเก็บข้อมูลที่ตามมา: +----------------+------------+ | party_code_idn | party_code | +----------------+------------+ | 1 | Republican | | 2 | Democratic | +----------------+------------+ party_codeคอลัมน์ซึ่งช่วยให้ค่า 'รีพับลิกัน' และ 'ประชาธิปไตย' เป็นสำคัญที่แท้จริงของตารางมีการตั้งค่าที่มีข้อ จำกัด ที่ไม่ซ้ำกัน แต่ผมเลือกที่จะเพิ่มparty_code_idnและกำหนดเป็น PK ของตาราง (แม้ว่าเหตุผลที่พูด , party_codeอาจทำงานเป็นคีย์หลัก [PK]) คำถาม แนวปฏิบัติที่เหมาะสมที่สุดสำหรับการชี้ไปยังค่าการค้นหาจากตารางธุรกรรมคืออะไร ฉันควรสร้างการอ้างอิงต่างประเทศ (FK) อ้างอิงทั้ง(a)โดยตรงกับค่าที่เป็นธรรมชาติและมีความหมายหรือ(b)เพื่อแทนค่า? …

2
ความสัมพันธ์กับคีย์ต่างประเทศแบบมีเงื่อนไข
ขณะนี้ฉันมีรหัสต่างประเทศระหว่างสองหน่วยงานและฉันต้องการสร้างความสัมพันธ์แบบมีเงื่อนไขให้กับประเภทรายการของตารางใดตารางหนึ่ง นี่คือลำดับชั้นของตารางซึ่งทำได้ผ่านการอ้างอิง FK ตั้งแต่เด็กจนถึงผู้ปกครอง Store / \ Employees \ TransactionalStores / | \ Kiosks | BrickMortars Onlines ขณะนี้ฉันมีความสัมพันธ์ FK จากพนักงานเพื่อจัดเก็บ ALTER TABLE Employees ADD CONSTRAINT Employee_Store FOREIGN KEY (TransStoreId) REFERENCES TransactionalStores(StoreId) ฉันต้องการเพิ่มเงื่อนไข: WHERE TransactionalStores.storeType != 'ONLINE_TYPE' เป็นไปได้หรือไม่ฉันต้อง subclass TransactionalStores เป็นสองประเภทย่อยใหม่ (เช่น PhysicalStores และ VirtualStores)

1
วิธีจัดการข้อมูล 3.1 พันล้านแถว
ขณะนี้ฉันได้รับมอบหมายให้ติดตั้งสกีมาหน่วยเก็บข้อมูลสำหรับข้อมูลจำนวนมาก ข้อมูลจะถูกเข้าถึงเป็นหลักเพื่อกำหนดdata pointค่าปัจจุบันแต่ฉันก็ต้องติดตามประวัติหกเดือนที่ผ่านมาสำหรับแนวโน้ม / วิเคราะห์ข้อมูล มีการเพิ่มข้อกำหนดล่าสุดเพื่อติดตามmin/ max/ sumค่าสำหรับชั่วโมงที่ผ่านมา หมายเหตุ: โดยหลักการแล้วฉันต้องการพิจารณาตัวเลือก MongoDB แต่ฉันต้องแสดงให้เห็นว่าฉันได้ใช้ตัวเลือก SQL-Server หมดแล้ว ข้อมูล ตารางต่อไปนี้แสดงถึงแหล่งข้อมูลหลัก (สอบถามบ่อยที่สุด) ตารางจะมีแถวประมาณห้าล้านแถว การเปลี่ยนแปลงข้อมูลส่วนใหญ่จะเป็นUPDATEคำสั่งที่มีข้อความเป็นครั้งคราวมากINSERTหลังจากการโหลดข้อมูลเริ่มต้น ฉันเลือกที่จะจัดกลุ่มข้อมูลตามdataPointIdที่คุณจะเลือกall values for a given data pointเสมอ // Simplified Table CREATE TABLE [dbo].[DataPointValue]( [dataPointId] [int] NOT NULL, [valueId] [int] NOT NULL, [timestamp] [datetime] NOT NULL, [minimum] [decimal](18, 0) NOT NULL, [hourMinimum] …

2
การจัดเก็บข้อมูลจำนวนมากจากอาร์เรย์เซ็นเซอร์
ฉันได้รับมอบหมายให้ใช้โซลูชัน (แอพและฐานข้อมูล) เพื่อเก็บตัวอย่างข้อมูลจากอาร์เรย์เซ็นเซอร์ขนาดใหญ่ อาร์เรย์ในปัจจุบันประกอบด้วยเซ็นเซอร์ประมาณ 20,000 ตัว แต่ในไม่ช้าจะมีการเติบโตสูงถึง 100,000 เซ็นเซอร์ เซ็นเซอร์แต่ละตัวจะส่งตัวอย่างข้อมูลทุก ๆ 10 วินาทีและแต่ละตัวอย่างมีขนาด 28 ไบต์ การทำผลรวมจึงนำไปสู่: 8640 ตัวอย่างต่อเซ็นเซอร์ต่อวัน ข้อมูล 242kB ต่อเซ็นเซอร์ต่อวัน 864 ล้านตัวอย่างต่อวัน ตอนนี้ฉันสงสัยว่าวิธีที่ดีที่สุดในการจัดเก็บ / ดึงข้อมูลคืออะไร? ฉัน "เข้าร่วม" โครงการนี้หลังจากที่ซอฟต์แวร์ได้ถูกระบุไว้แล้วดังนั้นจึงต้องดำเนินการบนแพลตฟอร์ม Windows โดยใช้ SQL Server โซลูชันปัจจุบันในหัวของฉันคือการสร้างฐานข้อมูลที่มีสองตารางเพื่อเก็บตัวอย่างข้อมูล ตัวแรกทำหน้าที่จัดเรียงของดัชนีเป็นวินาทีที่เก็บตัวอย่างที่เรียงไว้ในเขตข้อมูลไบนารีในแต่ละวันต่อเซ็นเซอร์พื้นฐาน: Table 1: RecordID - BigInt - Identity SensorID - BigInt - Primary Key Date - …

6
แยกตารางใน MySQL การปฏิบัติที่ดี?
ฉันเริ่มทำงานกับโครงการที่มีอยู่และผู้พัฒนาคนก่อนหน้าได้แบ่งตารางออกเป็น 10 ตารางแยกกันด้วยสคีมาที่เหมือนกัน แต่มีข้อมูลต่างกัน ตารางมีลักษณะดังนี้: [tableName_0] [tableName_1] [tableName_2] [tableName_3] [tableName_4] [tableName_5] [tableName_6] [tableName_7] [tableName_8] [tableName_9] คีย์หลักคือidฟิลด์จำนวนเต็ม แอปพลิเคชันใช้อัลกอริทึมแฮช ( idmod 10) เพื่อให้ทราบว่าตารางใดที่จะเข้าถึงเมื่อทำการค้นหา ตัวอย่างid= 10 [tableName_0]จะส่งผลให้ เมื่อรวมกันแล้วตารางอาจมี 100,000 แถวและอัตราการเติบโตค่อนข้างต่ำ ดังนั้นคำถามของฉันคือว่านี่เป็นทางออกที่ทำงานได้หรือไม่แม้ว่ามันจะเป็นแนวปฏิบัติที่ดีในทุกสถานการณ์ ทฤษฎีของฉันคือการผลักดันให้พวกเขารวมกันเพราะมันจะทำให้สิ่งต่าง ๆ ง่ายขึ้นเท่าที่UNIONs ฯลฯ ไป ข้อเสียเปรียบหลักคือการเปลี่ยนรหัสแอปพลิเคชันทั้งหมดและไม่ว่าจะคุ้มค่าในระยะยาวหรือไม่

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