MySQL 'สร้างสคีมา' และ 'สร้างฐานข้อมูล' - มีความแตกต่างหรือไม่


105

การเข้าสู่information_schemaฐานข้อมูลสูงสุดและจุดสูงสุดที่ข้อมูลเมตาสำหรับโครงการสัตว์เลี้ยงของฉันฉันรู้สึกลำบากในการทำความเข้าใจความแตกต่าง (ถ้ามี) ระหว่างcreate schemaคำสั่งและcreate databaseคำสั่งสำหรับ MySQL

มีความแตกต่างกันหรือไม่? หากไม่เป็นเช่นนั้นนี่เป็นรูปแบบพฤติกรรมทั่วไปสำหรับฐานข้อมูลเชิงสัมพันธ์ (ฉันได้ยินมาว่าสำหรับฐานข้อมูลอื่นเช่น Oracle สคีมามีอยู่ในฐานข้อมูลแทนที่จะอยู่ในระดับเดียวกับฐานข้อมูล)

ขอบคุณ!

คำตอบ:


140

เอกสารของ MySQL กล่าวว่า :

CREATE DATABASE สร้างฐานข้อมูลด้วยชื่อที่กำหนด ในการใช้คำสั่งนี้คุณต้องมีสิทธิ์ CREATE สำหรับฐานข้อมูล CREATE SCHEMA เป็นคำพ้องความหมายสำหรับ CREATE DATABASE เหมือนกับ MySQL 5.0.2

ดังนั้นจึงดูเหมือนเป็นเรื่องปกติที่คำสั่งทั้งสองจะทำเหมือนกัน


1
ยอดเยี่ยม! ฉันคิดว่าสคีมาเป็นส่วนหนึ่งของอินสแตนซ์ฐานข้อมูล ขอบคุณมาก ๆ!!
asgs

27

เอกสาร Mysql ระบุว่า: CREATE SCHEMA เป็นคำพ้องความหมายสำหรับ CREATE DATABASEเหมือนกับ MySQL 5.0.2


ทั้งหมดนี้กลับไปเป็นมาตรฐาน ANSI สำหรับ SQL ในช่วงกลางทศวรรษที่ 80

มาตรฐานนั้นมีคำสั่ง "CREATE SCHEMA" และทำหน้าที่แนะนำช่องว่างชื่อหลายช่องสำหรับชื่อตารางและมุมมอง ตารางและมุมมองทั้งหมดถูกสร้างขึ้นภายใน "สคีมา" ฉันไม่รู้ว่าเวอร์ชันนั้นกำหนดการเข้าถึงตารางและมุมมองข้ามสคีมาหรือไม่ แต่ฉันคิดว่าเป็นเช่นนั้น AFAIR ไม่มีผลิตภัณฑ์ใด (อย่างน้อยก็ในตอนนั้น) นำมาใช้จริงๆแนวคิดทั้งหมดนั้นเป็นทฤษฎีมากกว่าการปฏิบัติ

OTOH, ISTR มาตรฐานเวอร์ชันนี้ไม่มีแนวคิดของคำสั่ง "ผู้ใช้" หรือ "สร้างผู้ใช้" ดังนั้นจึงมีผลิตภัณฑ์ที่ใช้แนวคิดของ "ผู้ใช้" (ซึ่งจากนั้นมีพื้นที่ชื่อของตัวเองสำหรับตารางและ มุมมอง) เพื่อใช้งานเทียบเท่ากับ "สคีมา"

นี่คือพื้นที่ที่ระบบต่างกัน

เท่าที่เกี่ยวกับการบริหารก็ไม่ควรสำคัญเกินไปเพราะที่นี่คุณมีความแตกต่างอยู่แล้ว

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


@DerMike ฉันดูเหมือนจะจำได้, internetslang.com/ISTR-meaning-definition.asp
reevesy

2
การอ้างอิงแหล่งที่มาดั้งเดิมจะถูกต้องซึ่งคำตอบนี้ถูกนำมาจากที่ใด: lists.mysql.com/mysql/211647
informatik01

@ informatik01 เว้นแต่ Adinochestva จะเป็นโปสเตอร์ต้นฉบับ
FanaticD

SQL Server ใช้ SCHEMA เป็นกลุ่มของตาราง / ชนิด / .. ภายในฐานข้อมูล
Gudgip

7

พูดอย่างเคร่งครัดความแตกต่างระหว่างฐานข้อมูลและสคีมาไม่มีอยู่ใน MySql

อย่างไรก็ตามนี่ไม่ใช่กรณีในเอ็นจิ้นฐานข้อมูลอื่นเช่น SQL Server ในเซิร์ฟเวอร์ SQL:,

ทุกตารางเป็นกลุ่มของวัตถุในฐานข้อมูลที่เรียกว่าคีมาฐานข้อมูล เป็นคอนเทนเนอร์หรือเนมสเปซ (กำลังค้นหาMicrosoft SQL Server 2012 )

โดยค่าเริ่มต้นตารางทั้งหมดใน SQL Server เป็นของคีเริ่มต้นเรียกว่าdbo เมื่อคุณสอบถามตารางที่ไม่ได้รับการจัดสรรให้กับสคีมาใด ๆ คุณสามารถทำสิ่งต่อไปนี้

SELECT *
FROM your_table

ซึ่งเทียบเท่ากับ:

SELECT *
FROM dbo.your_table

ตอนนี้เซิร์ฟเวอร์ SQL อนุญาตให้สร้างสคีมาที่แตกต่างกันซึ่งทำให้คุณมีความเป็นไปได้ในการจัดกลุ่มตารางที่มีวัตถุประสงค์คล้ายกัน ที่ช่วยในการจัดระเบียบฐานข้อมูล

ตัวอย่างเช่นคุณสามารถสร้างสคีมาที่เรียกว่ายอดขายกับตารางเช่นใบแจ้งหนี้ , creditorders (และอื่น ๆ ที่เกี่ยวข้องกับการขาย) และสคีอื่นที่เรียกว่าการค้นหาที่มีตารางเช่นประเทศ , สกุลเงิน , subscriptiontypes (และโต๊ะอื่น ๆ ที่นำมาใช้เป็นรูปลักษณ์ ขึ้นโต๊ะ).

ตารางที่ถูกจัดสรรให้กับโดเมนเฉพาะจะแสดงใน SQL Server Studio Manager โดยมีชื่อ schema ที่อยู่ข้างหน้าชื่อตาราง (เหมือนกับตารางที่เป็นของdbo schema เริ่มต้น)

มีสกีมาพิเศษใน SQL Server หากต้องการอ้างอิงหนังสือเล่มเดียวกัน:

มีสคีมาฐานข้อมูลในตัวหลายแบบและไม่สามารถลบหรือเปลี่ยนแปลงได้:

1) dboสคีมาเริ่มต้น

2) ผู้เยี่ยมชมมีอ็อบเจ็กต์ที่พร้อมใช้งานสำหรับผู้ใช้ที่เป็นแขก ("ผู้ใช้ที่เป็นแขก" เป็นบทบาทพิเศษในภาษา SQL Server โดยมีสิทธิ์เริ่มต้นและมีการ จำกัด สิทธิ์อย่างมาก) ไม่ค่อยได้ใช้

3) INFORMATION_SCHEMA ที่ใช้โดยมุมมองสคีมาข้อมูล

4) sysสงวนไว้สำหรับการใช้งานภายใน SQL Server โดยเฉพาะ

Schemas ไม่ได้มีไว้สำหรับการจัดกลุ่มเท่านั้น มันเป็นไปได้จริงที่จะให้สิทธิ์ที่แตกต่างกันสำหรับแต่ละสคีกับผู้ใช้งานที่แตกต่างกันตามที่อธิบายไว้MSDN

ด้วยวิธีนี้การค้นหาสคีมาที่กล่าวถึงข้างต้นสามารถทำให้ผู้ใช้มาตรฐานใด ๆ ในฐานข้อมูลพร้อมใช้งาน (เช่นSELECTสิทธิ์เท่านั้น) ในขณะที่ตารางที่เรียกว่าsupplierbankaccountdetailsอาจได้รับการจัดสรรในสคีมาอื่นที่เรียกว่าการเงินและเพื่อให้การเข้าถึงเฉพาะผู้ใช้ใน กลุ่มaccounts(เพียงตัวอย่างคุณจะได้รับแนวคิด)

สุดท้ายและอ้างถึงหนังสือเล่มเดียวกันอีกครั้ง:

ไม่ใช่สคีมาฐานข้อมูลและสคีมาตารางเดียวกัน เดิมคือเนมสเปซของตารางในขณะที่ชื่อหลังหมายถึงนิยามตาราง



5

ฐานข้อมูลคือชุดของสคีมาและสคีมาคือชุดของตาราง แต่ใน MySQL พวกเขาใช้ในลักษณะเดียวกัน


1

ดังนั้นจึงไม่มีความแตกต่างระหว่าง MySQL "database" และ MySQL "schema": เป็นชื่อสองชื่อที่เหมือนกัน - เนมสเปซสำหรับตารางและวัตถุ DB อื่น ๆ

สำหรับผู้ที่มีพื้นหลัง Oracle: MySQL "database" aka MySQL "schema" สอดคล้องกับ Oracle schema ความแตกต่างระหว่างคำสั่ง MySQL และ Oracle CREATE SCHEMA คือใน Oracle คำสั่ง CREATE SCHEMA ไม่ได้สร้างสคีมาจริง ๆ แต่จะเติมด้วยตารางและมุมมอง และคำสั่ง CREATE DATABASE ของ Oracle ทำสิ่งที่แตกต่างจากคู่ MySQL มาก

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