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

การออกแบบฐานข้อมูลเป็นกระบวนการในการระบุโครงสร้างและด้านตรรกะของฐานข้อมูล เป้าหมายของการออกแบบฐานข้อมูลคือการแสดง "จักรวาลแห่งวาทกรรม" - ประเภทของข้อเท็จจริงกฎเกณฑ์ทางธุรกิจและข้อกำหนดอื่น ๆ ที่ฐานข้อมูลมีวัตถุประสงค์เพื่อเป็นแบบจำลอง

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

6
รูปแบบการออกแบบฐานข้อมูลเชิงสัมพันธ์? [ปิด]
ปิด คำถามนี้จะต้องมีมากขึ้นมุ่งเน้น ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้มุ่งเน้นที่ปัญหาเดียวโดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 เดือนที่ผ่านมา ปรับปรุงคำถามนี้ รูปแบบการออกแบบมักจะเกี่ยวข้องกับการออกแบบเชิงวัตถุ มีรูปแบบการออกแบบสำหรับการสร้างและการเขียนโปรแกรมฐานข้อมูลเชิงสัมพันธ์หรือไม่? ปัญหามากมายแน่นอนต้องมีวิธีแก้ไขปัญหาที่นำมาใช้ใหม่ ตัวอย่างจะรวมถึงรูปแบบสำหรับการออกแบบตารางขั้นตอนการจัดเก็บทริกเกอร์ ฯลฯ ... มีพื้นที่เก็บข้อมูลออนไลน์ของรูปแบบดังกล่าวคล้ายกับmartinfowler.comหรือไม่ ตัวอย่างของปัญหาที่รูปแบบสามารถแก้ไขได้: การจัดเก็บข้อมูลแบบลำดับขั้น (เช่นตารางเดี่ยวที่มีประเภท vs หลายตารางพร้อมกับรหัส 1: 1 และความแตกต่าง ... ) การจัดเก็บข้อมูลด้วยโครงสร้างตัวแปร (เช่นคอลัมน์ทั่วไปเทียบกับ xml เทียบกับคอลัมน์ที่คั่นด้วย ... ) ล้างข้อมูลให้เป็นปกติ (จะทำอย่างไรกับผลกระทบน้อยที่สุด ฯลฯ ... )

4
วิธีการใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งแบบตัวต่อตัวและแบบกลุ่มต่อกลุ่มในขณะที่ออกแบบตาราง
ใครสามารถอธิบายวิธีการใช้ความสัมพันธ์แบบหนึ่งต่อหนึ่งแบบตัวต่อตัวและแบบกลุ่มต่อกลุ่มในขณะที่ออกแบบตารางพร้อมตัวอย่าง

4
แบบฟอร์มฐานข้อมูลปกติคืออะไรและคุณสามารถให้ตัวอย่างได้บ้าง [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้มีแนวโน้มที่จะเรียกร้องการอภิปรายการโต้แย้งการหยั่งเสียงหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ในการออกแบบฐานข้อมูลเชิงสัมพันธ์มีแนวคิดของการทำให้เป็นมาตรฐานของฐานข้อมูลหรือการทำให้เป็นมาตรฐานซึ่งเป็นกระบวนการของการจัดระเบียบคอลัมน์ (คุณลักษณะ) และตาราง (ความสัมพันธ์) เพื่อลดความซ้ำซ้อนของข้อมูลและปรับปรุงความสมบูรณ์ของข้อมูล (ตามที่เขียนบนWikipedia ) เนื่องจากบทความส่วนใหญ่ค่อนข้างเป็นเรื่องทางเทคนิคและยากที่จะเข้าใจฉันจึงขอให้บางคนเขียนคำอธิบายที่เข้าใจง่ายขึ้นโดยอ้างอิงจากตัวอย่างเกี่ยวกับความหมายของ 1NF, 2NF, 3NF แม้แต่ 3.5NF (Boyce-Codd)

3
จุดสิ้นสุดหลักของสมาคมหมายถึงอะไรในความสัมพันธ์ 1: 1 ในกรอบ Entity
public class Foo { public string FooId{get;set;} public Boo Boo{get;set;} } public class Boo { public string BooId{get;set;} public Foo Foo{get;set;} } ฉันพยายามทำสิ่งนี้ใน Entity Framework เมื่อฉันพบข้อผิดพลาด: ไม่สามารถระบุจุดสิ้นสุดหลักของการเชื่อมโยงระหว่างประเภท 'ConsoleApplication5.Boo' และ 'ConsoleApplication5.Foo' จุดสิ้นสุดหลักของการเชื่อมโยงนี้ต้องกำหนดค่าอย่างชัดเจนโดยใช้ API ความคล่องแคล่วของความสัมพันธ์หรือหมายเหตุประกอบข้อมูล ฉันได้เห็นคำถามเกี่ยวกับ StackOverflow ด้วยวิธีแก้ปัญหาสำหรับข้อผิดพลาดนี้ แต่ฉันต้องการเข้าใจความหมายของคำว่า "การสิ้นสุดที่สำคัญ"

30
มีอะไรผิดปกติกับกุญแจต่างประเทศ?
ฉันจำได้ว่าเคยได้ยินJoel Spolskyพูดถึงในพอดคาสต์ 014ว่าเขาแทบจะไม่เคยใช้กุญแจต่างประเทศ (ถ้าฉันจำได้ถูกต้อง) อย่างไรก็ตามสำหรับฉันแล้วพวกเขาดูเหมือนจะสำคัญมากที่จะหลีกเลี่ยงการทำซ้ำและปัญหาความถูกต้องของข้อมูลในฐานข้อมูลของคุณ ผู้คนมีเหตุผลที่ชัดเจนว่าทำไม (เพื่อหลีกเลี่ยงการสนทนาในแนวที่มีหลักการสแต็คล้น)? แก้ไข: "ฉันยังไม่มีเหตุผลในการสร้างคีย์ต่างประเทศดังนั้นนี่อาจเป็นเหตุผลแรกที่ฉันตั้งค่าจริง"

5
“ ป้องกันการเปลี่ยนแปลงการบันทึกที่ต้องการให้สร้างตารางใหม่” ผลกระทบเชิงลบ
คำนำ ฉันแก้ไขคอลัมน์ใน SQL Server 2008 วันนี้เปลี่ยนประเภทข้อมูลจากสกุลเงิน (18,0) เป็น (19,2) ฉันได้รับข้อผิดพลาด "การเปลี่ยนแปลงที่คุณทำต้องใช้ตารางต่อไปนี้เพื่อทำการดร็อปและสร้างใหม่" จาก SQL Server ก่อนที่คุณจะตอบคำถามโปรดอ่านสิ่งต่อไปนี้: ฉันรู้แล้วว่ามีตัวเลือกในเครื่องมือ►ตัวเลือก►ผู้ออกแบบ►นักออกแบบตารางและฐานข้อมูล►ยกเลิกการทำเครื่องหมายในช่อง "ป้องกันการบันทึกการเปลี่ยนแปลงที่ต้องมีการสร้างตารางใหม่" ... ดังนั้นอย่าตอบด้วย! คำถามจริง คำถามจริงของฉันมีไว้สำหรับอย่างอื่นดังนี้: มีผลเสีย / ข้อเสียที่เป็นไปได้ของการทำเช่นนี้หรือไม่? จริง ๆ แล้วตารางจะถูกดร็อปและสร้างใหม่โดยอัตโนมัติเมื่อไม่ได้ทำเครื่องหมายในช่องนี้หรือไม่? ถ้าเป็นเช่นนั้นตารางจะคัดลอกแบบจำลองที่แน่นอน 100% ของตารางต้นฉบับหรือไม่

4
สร้างข้อ จำกัด ที่ไม่ซ้ำกับคอลัมน์ null
ฉันมีตารางที่มีเค้าโครงนี้: CREATE TABLE Favorites ( FavoriteId uuid NOT NULL PRIMARY KEY, UserId uuid NOT NULL, RecipeId uuid NOT NULL, MenuId uuid ) ฉันต้องการสร้างข้อ จำกัด ที่ไม่ซ้ำแบบนี้: ALTER TABLE Favorites ADD CONSTRAINT Favorites_UniqueFavorite UNIQUE(UserId, MenuId, RecipeId); แต่นี้จะช่วยให้หลายแถวด้วยเหมือนกันถ้า(UserId, RecipeId) MenuId IS NULLผมต้องการที่จะช่วยให้NULLในMenuIdการจัดเก็บที่ชื่นชอบที่ไม่มีเมนูที่เกี่ยวข้อง แต่ฉันเพียงต้องการมากที่สุดคนหนึ่งของแถวเหล่านี้ต่อผู้ใช้ / คู่สูตร ความคิดที่ฉันมีคือ: ใช้ UUID ที่กำหนดค่าตายตัวบางอย่าง (เช่นศูนย์ทั้งหมด) แทนค่า Null อย่างไรก็ตามMenuIdมีข้อ …

11
การออกแบบฐานข้อมูลครั้งแรก: ฉันกำลังเอาชนะอยู่หรือไม่ [ปิด]
ปิด คำถามนี้เป็นคำถามความคิดเห็นตาม ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ อัปเดตคำถามเพื่อให้สามารถตอบข้อเท็จจริงและการอ้างอิงได้โดยแก้ไขโพสต์นี้ ปิดให้บริการใน2 ปีที่ผ่านมา ปรับปรุงคำถามนี้ พื้นหลัง ฉันเป็นนักเรียน CS ปีแรกและฉันทำงานนอกเวลาเพื่อธุรกิจขนาดเล็กของพ่อ ฉันไม่มีประสบการณ์ในการพัฒนาแอปพลิเคชันโลกแห่งความจริง ฉันได้เขียนสคริปต์ใน Python บางหลักสูตรใน C แต่ไม่มีอะไรเช่นนี้ พ่อของฉันมีธุรกิจการฝึกอบรมขนาดเล็กและทุกชั้นเรียนมีกำหนดบันทึกและติดตามผ่านทางเว็บแอปพลิเคชันภายนอก มีคุณสมบัติการส่งออก / "รายงาน" แต่มันเป็นเรื่องทั่วไปมากและเราต้องการรายงานที่เฉพาะเจาะจง เราไม่สามารถเข้าถึงฐานข้อมูลจริงเพื่อเรียกใช้แบบสอบถาม ฉันถูกขอให้ตั้งค่าระบบการรายงานที่กำหนดเอง ความคิดของฉันคือการสร้างการส่งออกและนำเข้า CSV ทั่วไป (อาจเป็น Python) ลงในฐานข้อมูล MySQL ที่โฮสต์ในสำนักงานทุกคืนจากที่ที่ฉันสามารถเรียกใช้แบบสอบถามเฉพาะที่จำเป็น ฉันไม่มีประสบการณ์ในฐานข้อมูล แต่เข้าใจพื้นฐานมาก ฉันอ่านเกี่ยวกับการสร้างฐานข้อมูลและรูปแบบปกติเล็กน้อย เราอาจเริ่มมีลูกค้าต่างประเทศเร็ว ๆ นี้ดังนั้นฉันต้องการให้ฐานข้อมูลไม่เกิดการระเบิดหาก / เมื่อเกิดขึ้น ขณะนี้เรายังมี บริษัท ใหญ่สองสามแห่งที่เป็นลูกค้าด้วยแผนกที่แตกต่างกัน (เช่น บริษัท แม่ ACME, แผนกดูแลสุขภาพ ACME, …

4
ON [หลัก] หมายความว่าอย่างไร
ฉันกำลังสร้างสคริปต์การตั้งค่า SQL และฉันใช้สคริปต์ของคนอื่นเป็นตัวอย่าง นี่คือตัวอย่างของสคริปต์: SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO CREATE TABLE [dbo].[be_Categories]( [CategoryID] [uniqueidentifier] ROWGUIDCOL NOT NULL CONSTRAINT [DF_be_Categories_CategoryID] DEFAULT (newid()), [CategoryName] [nvarchar](50) NULL, [Description] [nvarchar](200) NULL, [ParentID] [uniqueidentifier] NULL, CONSTRAINT [PK_be_Categories] PRIMARY KEY CLUSTERED ( [CategoryID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = …

8
คุณจะแสดงการสืบทอดในฐานข้อมูลได้อย่างไร
ฉันคิดเกี่ยวกับวิธีแสดงโครงสร้างที่ซับซ้อนในฐานข้อมูล SQL Server พิจารณาแอปพลิเคชั่นที่ต้องการจัดเก็บรายละเอียดของตระกูลวัตถุที่แชร์คุณสมบัติบางอย่าง แต่มีหลายโปรแกรมที่ไม่เหมือนกัน ตัวอย่างเช่นแพคเกจประกันภัยเชิงพาณิชย์อาจรวมถึงความรับผิด, มอเตอร์, ทรัพย์สินและความคุ้มครองครอบคลุมภายในบันทึกนโยบายเดียวกัน มันเป็นเรื่องเล็กน้อยที่จะนำสิ่งนี้ไปใช้ใน C # และอื่น ๆ เนื่องจากคุณสามารถสร้างนโยบายที่มีการรวบรวมส่วนต่างๆโดยที่ส่วนจะได้รับการถ่ายทอดตามความจำเป็นสำหรับความคุ้มครองประเภทต่างๆ อย่างไรก็ตามฐานข้อมูลเชิงสัมพันธ์ดูเหมือนจะไม่อนุญาตสิ่งนี้ได้อย่างง่ายดาย ฉันเห็นว่ามีสองตัวเลือกหลัก: สร้างตารางนโยบายจากนั้นตารางส่วนที่มีฟิลด์ทั้งหมดที่จำเป็นสำหรับรูปแบบที่เป็นไปได้ทั้งหมดซึ่งส่วนใหญ่จะเป็นโมฆะ สร้างตารางนโยบายและตารางส่วนต่างๆจำนวนมากหนึ่งตารางสำหรับความคุ้มครองแต่ละประเภท ตัวเลือกทั้งสองนี้ดูเหมือนจะไม่เป็นที่น่าพอใจโดยเฉพาะอย่างยิ่งเมื่อจำเป็นต้องเขียนข้อความค้นหาในทุกส่วนซึ่งจะเกี่ยวข้องกับการรวมจำนวนมากหรือการตรวจสอบโมฆะจำนวนมาก แนวปฏิบัติที่ดีที่สุดสำหรับสถานการณ์นี้คืออะไร

11
สคีมาสำหรับฐานข้อมูลหลายภาษา
ฉันกำลังพัฒนาซอฟต์แวร์หลายภาษา ตราบใดที่รหัสแอปพลิเคชันดำเนินไปการ localizability ไม่ใช่ปัญหา เราสามารถใช้ทรัพยากรเฉพาะภาษาและมีเครื่องมือทุกประเภทที่ทำงานได้ดีกับพวกเขา แต่วิธีที่ดีที่สุดในการกำหนดสกีมาฐานข้อมูลหลายภาษาคืออะไร สมมติว่าเรามีตารางจำนวนมาก (100 หรือมากกว่า) และแต่ละตารางสามารถมีหลายคอลัมน์ที่สามารถแปลเป็นภาษาท้องถิ่นได้ (คอลัมน์ nvarchar ส่วนใหญ่ควรเป็นภาษาท้องถิ่น) ตัวอย่างเช่นหนึ่งในตารางอาจเก็บข้อมูลผลิตภัณฑ์: CREATE TABLE T_PRODUCT ( NAME NVARCHAR(50), DESCRIPTION NTEXT, PRICE NUMBER(18, 2) ) ฉันสามารถนึกถึงสามวิธีในการสนับสนุนข้อความหลายภาษาในคอลัมน์ NAME และ DESCRIPTION: แยกคอลัมน์สำหรับแต่ละภาษา เมื่อเราเพิ่มภาษาใหม่ให้กับระบบเราต้องสร้างคอลัมน์เพิ่มเติมเพื่อเก็บข้อความที่แปลเช่นนี้: CREATE TABLE T_PRODUCT ( NAME_EN NVARCHAR(50), NAME_DE NVARCHAR(50), NAME_SP NVARCHAR(50), DESCRIPTION_EN NTEXT, DESCRIPTION_DE NTEXT, DESCRIPTION_SP NTEXT, PRICE NUMBER(18,2) …

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

30
นักพัฒนาทุกคนควรรู้อะไรเกี่ยวกับฐานข้อมูล [ปิด]
ตามที่เป็นอยู่ในปัจจุบันคำถามนี้ไม่เหมาะสำหรับรูปแบบคำถาม & คำตอบของเรา เราคาดหวังคำตอบที่จะได้รับการสนับสนุนจากข้อเท็จจริงการอ้างอิงหรือความเชี่ยวชาญ แต่คำถามนี้อาจเรียกร้องให้มีการอภิปรายโต้แย้งโต้แย้งหรือการอภิปรายเพิ่มเติม หากคุณรู้สึกว่าคำถามนี้สามารถปรับปรุงและเปิดใหม่ได้โปรดไปที่ศูนย์ช่วยเหลือเพื่อขอคำแนะนำ ปิดให้บริการใน7 ปีที่ผ่านมา ไม่ว่าเราจะชอบหรือไม่ก็ตามนักพัฒนาส่วนใหญ่ของเราหลายคนไม่ได้ทำงานกับฐานข้อมูลเป็นประจำหรืออาจต้องทำงานกับใครสักคน และเมื่อพิจารณาถึงปริมาณของการใช้งานในทางที่ผิดและปริมาณของคำถามที่เกี่ยวข้องกับฐานข้อมูลที่เกิดขึ้นทุกวันมันยุติธรรมที่จะกล่าวว่ามีแนวคิดบางอย่างที่นักพัฒนาควรรู้ - แม้ว่าพวกเขาจะไม่ได้ออกแบบหรือทำงานด้วย ฐานข้อมูลวันนี้ ดังนั้น: แนวคิดที่สำคัญที่นักพัฒนาซอฟต์แวร์และผู้เชี่ยวชาญด้านซอฟต์แวร์อื่น ๆ ควรทราบเกี่ยวกับฐานข้อมูลคืออะไร แนวทางการตอบสนอง: ทำให้รายการของคุณสั้น หนึ่งแนวคิดต่อคำตอบนั้นดีที่สุด เฉพาะเจาะจง "การสร้างแบบจำลองข้อมูล" อาจเป็นทักษะที่สำคัญแต่นั่นหมายความว่าอย่างไร อธิบายเหตุผลของคุณ เหตุใดแนวคิดของคุณจึงสำคัญ อย่าพูดว่า "ใช้ดัชนี" อย่าตกเป็น "แนวปฏิบัติที่ดีที่สุด" โน้มน้าวใจผู้ฟังของคุณให้เรียนรู้เพิ่มเติม โหวตขึ้นโหวตคำตอบที่คุณเห็นด้วย อ่านคำตอบของคนอื่นก่อน หนึ่งคำตอบอันดับสูงคือคำสั่งที่มีประสิทธิภาพมากกว่าสองคำตอบที่อยู่ในอันดับต่ำ หากคุณมีมากกว่าที่จะเพิ่มให้เพิ่มความคิดเห็นหรืออ้างอิงต้นฉบับ อย่าลงคะแนนอะไรบางอย่างเพียงเพราะมันใช้ไม่ได้กับคุณเป็นการส่วนตัว เราทุกคนทำงานในโดเมนที่ต่างกัน วัตถุประสงค์ในที่นี้คือเพื่อให้ทิศทางสำหรับผู้เริ่มต้นฐานข้อมูลเพื่อทำความเข้าใจเกี่ยวกับการออกแบบฐานข้อมูลและการพัฒนาที่ขับเคลื่อนด้วยฐานข้อมูลอย่างดีรอบด้านไม่ให้แข่งขันเพื่อชิงตำแหน่งที่สำคัญที่สุด

4
หมายเลขโทรศัพท์ทั่วโลกที่ยาวที่สุดที่เป็นไปได้ที่ฉันควรพิจารณาใน SQL varchar (ความยาว) สำหรับโทรศัพท์คืออะไร
หมายเลขโทรศัพท์ทั่วโลกที่ยาวที่สุดที่เป็นไปได้ที่ฉันควรพิจารณาใน SQL varchar(length)สำหรับโทรศัพท์คืออะไร การพิจารณา: + สำหรับรหัสประเทศ () สำหรับรหัสพื้นที่ x + 6 ตัวเลขสำหรับส่วนขยายส่วนขยาย (ให้เป็น 8 {space}) ช่องว่างระหว่างกลุ่ม (เช่นในโทรศัพท์อเมริกา + x xxx xxx xxxx = 3 ช่องว่าง) ที่นี่คือที่ที่ฉันต้องการความช่วยเหลือจากคุณฉันต้องการให้มันเป็นทั่วโลก พิจารณาว่าในกรณีของฉันตอนนี้ฉันไม่ต้องการการ์ดและหมายเลขอื่น ๆ เริ่มต้นด้วยรหัสประเทศและลงท้ายด้วยนามสกุลไม่มีแฟกซ์ / โทรศัพท์ ฯลฯ แสดงความคิดเห็นหรือไม่ต้องใช้บัตรโทรศัพท์

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