ความแตกต่างระหว่างสคีมา / ฐานข้อมูลใน MySQL


290

มีความแตกต่างระหว่างสคีมาและฐานข้อมูลใน MySQL หรือไม่? ใน SQL Server ฐานข้อมูลเป็นคอนเทนเนอร์ระดับที่สูงกว่าสัมพันธ์กับสคีมา

ฉันอ่านCreate SchemaและCreate Databaseทำสิ่งเดียวกันใน MySQL ซึ่งทำให้ฉันเชื่อว่า schemas และฐานข้อมูลเป็นคำที่แตกต่างกันสำหรับวัตถุเดียวกัน


จริงๆแล้วฉันจะบอกว่าschemaดีกว่าdatabaseเพราะ MySQL เป็นฐานข้อมูลชนิดหนึ่งและมันมีหลายอย่างdatabaseและบางครั้งคุณก็useเป็น a databaseซึ่งทำให้การค้นหาจำนวนมากพลาดเป้า
theaws.blog

คำตอบ:


335

ตามที่กำหนดไว้ในอภิธานศัพท์ MySQL :

ใน MySQL ร่างกายเป็นสคีเป็นตรงกันกับฐานข้อมูล คุณสามารถใช้แทนคำหลักSCHEMAแทนDATABASEในไวยากรณ์ MySQL SQL เช่นใช้แทนCREATE SCHEMACREATE DATABASE

ผลิตภัณฑ์ฐานข้อมูลอื่น ๆ มีความแตกต่าง ตัวอย่างเช่นในผลิตภัณฑ์ Oracle Database schemaแสดงเพียงส่วนหนึ่งของฐานข้อมูล: ตารางและวัตถุอื่น ๆ ที่เป็นของผู้ใช้คนเดียว


74
ฉันคิดว่า "ผลิตภัณฑ์ฐานข้อมูลอื่น ๆ " เป็นคำที่ใช้เรียกฐานข้อมูลอื่น ๆ (อาจยกเว้น SQLite แต่ก็เข้าใจได้)
Stefan Steiger

5
การทำให้คีมาตรงกันกับฐานข้อมูลเป็นสิ่งที่น่าสนใจ - ฉันเชื่อมโยงมันกับวัตถุผู้ใช้เสมอและการพูดถึง SQLServer อย่างเป็นกันเองซึ่งแยกแนวคิดของผู้ใช้ / สคีมาออกเป็นส่วน ๆ เพื่อให้เกิดความยืดหยุ่นและวิธีที่น่าสนใจ
เจอราร์ดโอนีล

สิ่งที่น่ารำคาญเกี่ยวกับการกำหนด "สคี" เป็นกลุ่มของฐานข้อมูลวัตถุก็คือว่ามัน overloads ความหมายของคำว่าเก่าเช่นen.wikipedia.org/wiki/Database_schema
Mark E. Haase

1
@mehaase ทั้งสองเป็นความหมายเก่าของคำ Oracle มี schema ก่อนหน้าแม้กระทั่ง SQL3 (1999) แม้ว่าจะจัดการกับมันเป็นฐานข้อมูลอื่น ๆ จะเหยียบฐานข้อมูลเต็มเป่า ที่จริงแล้ว Oracle เรียกว่า "ฐานข้อมูล" สิ่งที่คนอื่นเรียกว่าเซิร์ฟเวอร์หรืออินสแตนซ์ของเซิร์ฟเวอร์ - ไบนารีที่ต่างกัน, ปฏิบัติการที่แตกต่างกัน, พอร์ตที่แตกต่างกัน
Panagiotis Kanavos

61

ขึ้นอยู่กับเซิร์ฟเวอร์ฐานข้อมูล MySQLไม่สนใจมันเป็นเรื่องเดียวกัน

Oracle, DB2และการแก้ปัญหาฐานข้อมูลระดับองค์กรอื่น ๆ ทำให้ความแตกต่าง โดยปกติschema คือชุดของตารางและฐานข้อมูลคือชุดของ schema


6
แม้ Microsoft SQL Server มีความแตกต่างที่คล้ายกันเป็นอย่างมากOracleและDB2สำหรับกรณีนี้
RBT

2
ใน MySQL "ฐานข้อมูล" และ "สคีมา" นั้นไม่เหมือนกัน มันเป็นสิ่งเดียวกัน (ตัวอย่างcreate databaseและcreate schemaมีความหมายเหมือนกัน) ใน Oracle schema มีความหมายเหมือนกันกับผู้ใช้ (อาจแม่นยำกว่า schema คือรายการของวัตถุทั้งหมดที่สร้างขึ้นภายใต้ผู้ใช้) MSSQL แตกต่างทั้งสาม (และเป็นผลเมื่อเข้าถึงตารางจากฐานข้อมูลที่แตกต่างกันชื่อจะต้องผ่านการรับรองจากทั้งฐานข้อมูลและสคีเช่นdatabase1.dbo.table2)
Mike Rosoft

17

หมายถึงเอกสารข้อมูล MySQL ,

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


7

PostgreSQL รองรับสกีมาซึ่งเป็นส่วนหนึ่งของฐานข้อมูล: https://www.postgresql.org/docs/current/static/ddl-schemas.html

ฐานข้อมูลมีสกีมาชื่อหนึ่งชื่อขึ้นไปซึ่งในทางกลับกันจะมีตาราง Schemas ยังมีวัตถุที่มีชื่อชนิดอื่นรวมถึงชนิดข้อมูลฟังก์ชันและตัวดำเนินการ ชื่อวัตถุเดียวกันสามารถใช้ในสกีมาที่แตกต่างกันโดยไม่มีข้อขัดแย้ง ตัวอย่างเช่น schema1 และ myschema สามารถมีตารางชื่อ mytable ซึ่งแตกต่างจากฐานข้อมูล schema ที่ไม่ได้แยกออกจากกันอย่างเข้มงวด: ผู้ใช้สามารถเข้าถึงวัตถุใน schemas ใด ๆ ในฐานข้อมูลที่พวกเขาเชื่อมต่อกับหากพวกเขามีสิทธิ์ที่จะทำเช่นนั้น

Schemas นั้นคล้ายคลึงกับไดเรกทอรีที่ระดับระบบปฏิบัติการยกเว้นว่าไม่สามารถซ้อนสกีมาได้

ในความเห็นที่ต่ำต้อยของฉัน MySQL ไม่ใช่ฐานข้อมูลอ้างอิง คุณไม่ควรอ้าง MySQL เพื่อขอคำอธิบาย MySQL ใช้ SQL ที่ไม่ได้มาตรฐานและบางครั้งก็อ้างคุณสมบัติที่ไม่รองรับ ตัวอย่างเช่นใน MySQL CREATE schema จะสร้างฐานข้อมูลเท่านั้น มันทำให้ผู้ใช้เข้าใจผิดอย่างแท้จริง

คำศัพท์ชนิดนี้เรียกว่า "MySQLism" โดย DBAs


2
แล้วมี "schemata" เพื่อเพิ่มความสับสนสำหรับผู้เริ่มต้น :)
Zeni

@ Zeni schemata ใน MySQL คืออะไร? ทั้งหมดที่ฉันสามารถหาได้คือการอ้างอิงไปยังตาราง data_schema schemata แต่ไม่มีคำจำกัดความสั้น ๆ เกี่ยวกับความหมายที่แท้จริง
Alf47

@ Alf47 "schemata" เป็นเพียงรูปแบบพหูพจน์ของคำว่า "schema" "schemas" ก็เป็นที่ยอมรับเช่นกัน แต่ไม่ใช่แฟนซี :)
jobo3208

6

ใน MySQL คีมาเป็นคำพ้องของฐานข้อมูล มันค่อนข้างสับสนสำหรับผู้เริ่มต้นที่ข้ามไปยัง MySQL และวันแรกที่พบคำว่าschemaดังนั้นพวกเขาจึงไม่ต้องกังวลเพราะทั้งคู่เหมือนกัน

เมื่อคุณเริ่มต้น MySQL เป็นครั้งแรกที่คุณต้องสร้างฐานข้อมูล (เช่นระบบฐานข้อมูลอื่น ๆ ) เพื่อทำงานร่วมกับคุณเพื่อให้คุณสามารถสร้าง SCHEMAซึ่งไม่มีอะไรนอกจากสร้างฐานข้อมูล

ในสคีมาของระบบฐานข้อมูลอื่น ๆ แสดงถึงส่วนหนึ่งของฐานข้อมูลหรือคอลเล็กชันของตารางและการรวบรวมสคีมาเป็นฐานข้อมูล


3

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


0

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

ตัวอย่างเช่นเมื่อคุณต้องการอัพเดต dbo.table_a และไวยากรณ์ไม่ผ่านการรับรองเช่นตาราง UPDATE ซึ่ง DBMS ไม่สามารถตัดสินใจที่จะใช้ตารางที่ต้องการได้ โดยค่าเริ่มต้น DBMS จะใช้ myuser.table_a


Schema's เป็นของผู้ใช้คนเดียว ตามค่าเริ่มต้นผู้ใช้ที่สร้างในฐานข้อมูลจะใช้สคีมา dbo เป็นสคีมาเริ่มต้น สคีมาเริ่มต้นที่ใช้สำหรับการอ้างอิงตารางที่ไม่ผ่านการรับรองนั้นเป็นสิ่งที่ตั้งค่าไว้สำหรับผู้ใช้นั้น
เจอราร์ดโอนีล

ใน SQL Server เวอร์ชันเก่าการลบผู้ใช้จะทำให้สกีมาที่เกี่ยวข้องนั้นไม่สามารถใช้ได้ ทุกวันนี้การแมประหว่างผู้ใช้กับสคีมานั้นเข้มงวดน้อยกว่า นอกจากนี้ยังถือว่าเป็นแนวปฏิบัติที่ดีที่สุดในการสร้างบัญชีปลอมเพียงบัญชีเดียวให้กับเจ้าของฐานข้อมูลและสกีมาทั้งหมด
Jonathan Allen
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.