عميل DBSchema لـ PostgreSQL
النجاح ليس مصادفة. إنه عمل شاق ومثابرة وتعلّم ودراسة وتضحية، وقبل كل شيء حب ما تفعله أو تتعلمه. —Pele
نقدّم أداة جديدة: DBSchema. ويقوم هذا العميل لقواعد البيانات بما يقرب مما يقوم به pgAdmin: التواصل مع خادم قاعدة البيانات. وسنستخدم DBSchema أساسًا لرسم نموذج فيزيائي. وستستطيع استخدام هذه الأداة استخدامًا جيدًا في المشروع المصاحب لهذه الدورة. وكمثال، سننشئ مخططًا بسيطًا من خمسة جداول. وبما أننا نجد أن الطلاب يجدون غالبًا بعض الصعوبة في فهم كيفية عمل المفاتيح الأجنبية والجداول الوسيطة (وتُسمّى أيضًا "جداول الوصل" أو "الجداول الترابطية")، فستنجز أيضًا تمرينًا صغيرًا بـ INSERT INTO على هذا المخطط الجديد.
عملاء PostgreSQL
كما تعلم، لا تخاطب خادم قاعدة بيانات (مثل PostgreSQL) مباشرة أبدًا. فكل التواصل يجري عبر عميل. وقد استخدمنا pgAdmin حتى الآن. وpgAdmin مفتوح المصدر ومجاني ومناسب جدًا أيضًا لما نريد فعله. غير أن هناك كثيرًا من العملاء البديلين:
- مفتوحة المصدر: DBeaver وSQuirrel وSQL Workbench/J...
- مغلقة المصدر: DbVisualizer وValentina Studio وJetbrains DataGrip وNavicat وDBSchema...
وفي هذا الفصل نقدّم أداة برمجية تجارية: DBSchema.
تقديم DBSchema
DBSchema أداة متقدمة لإدارة قواعد البيانات. ويمكنها التعامل مع كثير من أنظمة إدارة قواعد البيانات: MySQL وPostgreSQL وOracle وSQL Server وSqlite وغيرها. وهناك ما يسمى "Free Community Edition" و"Pro Edition".

وتكفي النسخة المجانية لكثير من الأمور التي نريد فعلها، بينما توجد في النسخة المدفوعة بعض الأمور التي قد تكون مفيدة عند العمل على مهمة أكبر.
وعند تثبيت DBSchema، تحصل على النسخة الكاملة مجانًا لمدة أسبوعين. لذلك نفضّل الانتظار قدر الإمكان قبل تثبيت هذا البرنامج، إلى أن تبدأ المهمة الجماعية الكبيرة. وبعد هذين الأسبوعين، يمكنك طلب تمديد فترة تجربة النسخة الاحترافية أسبوعين آخرين كما هو موضح في https://dbschema.com/evaluate.html.
ثبّت الآن DBSchema من https://dbschema.com/download.html. وستحصل تلقائيًا على "Pro Edition" لمدة أسبوعين. وبعد ذلك تعود إلى "Community Edition" المجانية (انظر https://dbschema.com/editions.html للحصول على القائمة الكاملة لجميع الفروق).
ولـ DBSchema توثيق جيد. وبالمناسبة، نحن نستخدم جزءًا محدودًا فقط من جميع ميزات هذا البرنامج العميل.
إجراء "الهندسة العكسية" لمخطط
نستخدم DBSchema عادةً كما يلي: ترسم نموذجًا فيزيائيًا ويولّد DBSchema جميع شيفرة SQL لبناء هذا النموذج في PostgreSQL على الخادم.
لكن يمكن فعل ذلك بالعكس أيضًا. وفي هذا القسم نوضّح كيفية استخدام DBSchema لإجراء هندسة عكسية لمخطط موجود على خادم قاعدة بياناتنا. يتصل DBSchema بالمخطط الموجود ويعيد بناء نموذج فيزيائي منه.
في فصل "علاقات واحد إلى متعدد" بنيت نموذجًا صغيرًا (يتكوّن من جدولين "Course" و"Lecturer") في المخطط المسمّى برقم r الخاص بك، في قاعدة بيانات مجموعتك. وتحقق الآن عبر pgAdmin مما إذا كان ذلك المخطط لا يزال موجودًا؟ وإن لم يكن: أنشئه عبر الخطوات في ذلك القسم (عشر دقائق من العمل).
وفي النص التالي يتصل DBSchema بخادم قاعدة بياناتنا ويحوّل مخططك إلى نموذج فيزيائي. وكالعادة: نفّذ هذه الخطوات بنفسك!
ويوضح الفيديو التالي كيفية استيراد مخطط موجود إلى DBSchema وكيفية تغيير بعض الإعدادات بعده. وأسفل الفيلم الخطوات المحددة التي عليك اتخاذها. وقد تجد الجمع بين الفيلم والخطة خطوة بخطوة مثاليًا؟ شاهد الفيلم أولًا ثم اقرأ خطوات المهمة واحدة واحدة ونفّذها.
رمز المحاضر الخاص بي (وبالتالي اسم مخططي) هو "u0012047". وبالطبع، استبدل ذلك في الخطوات التالية برقم r الخاص بك.
شغّل pgAdmin واستخدم اتصال التجميع (pooling) للانتقال إلى قاعدة بيانات مجموعتك ثم إلى مخططك. وفي حالتي أرى أن مخططي "u0012047" يحتوي الجدولين المطلوبين "Lecturer" و"Course":
ولنجرِ اختبارًا سريعًا للتأكد من أن هذين الجدولين يحتويان بيانات:
SELECT *
FROM ‘u0012047’.course; --and likewise for the table lecturer
يبدو ذلك جيدًا! حان وقت تشغيل DBSchema. وفي صفحة الفتح اختر "Start New Project" مع الخيار "Connect to Database". ويمكن فعل ذلك أيضًا من القائمة، بالمناسبة: "Model > New connected to the database".
ويستطيع DBSchema التعامل مع عشرات أنظمة إدارة قواعد البيانات. واختر من القائمة الفيل (المألوف الآن):
وفي مربع الحوار التالي، تحت "JDBC URL"، اختر الخيار "Standard". ثم املأ التفاصيل كما في اللقطة أدناه. وكـ "Database User" اختر المستخدم المحلي الذي أنشأته لاتصال التجميع وكلمة المرور المقابلة (وقد دوّنتهما في مكان ما عندما اتبعت دليل التثبيت. ومن الواضح أن تختار رقم المنفذ الصحيح لاتصال التجميع: وتُظهر اللقطة إصدار السنة الدراسية 2022-23. وفي "Database" ينبغي على الأرجح أن تكتب اسم قاعدة بيانات صفك (مثل 1TI9).
وفي علامة التبويب "Settings"، تحت "Connection Properies" أضف prepareThreshold=0;:
ويمكنك الآن تأكيد هذه النافذة بـ "Connect". وإذا سار كل شيء على ما يرام، سترى محتويات قاعدة البيانات. واختر الآن المخطط الذي تريد إجراء الهندسة العكسية له فقط:
وهذه هي النتيجة في DBSchema:
وهناك بعض الأمور التي لا نريدها:
- مربع التعليق "This is a layout ..."؛
- المستطيل "lecturer"؛
ويمكنك "إسقاط" هذين بالنقر بزر الفأرة الأيمن.
DBSchema لتنفيذ استعلامات SQL
يمكنك استخدام DBSchema لتنفيذ الاستعلامات بالطريقة نفسها التي تستخدم بها pgAdmin، كما يوضح الفيديو التالي:
بناء نموذج فيزيائي في DBSchema
"الهندسة العكسية" أداة جيدة، لكن ما نريده عادةً هو العكس: أن ترسم نموذجًا فيزيائيًا وتبنيه على خادم قاعدة البيانات. وسننظر في ذلك في هذا القسم. ومرة أخرى، نص عمل، كما اعتدت الآن.
والمثال التالي (من قاعدة بيانات أفلام) ليس مجرد توضيح للخطوات التي يجب اتخاذها في DBSchema، بل سنستخدمه أيضًا لنستعرض معك مرة أخرى جميع خطوات مهمة أكبر:
- وصف المسألة؛
- النموذج المفاهيمي؛
- النموذج المنطقي؛
- النموذج الفيزيائي؛
- إضافة البيانات؛
وصف قاعدة بيانات أفلام
أنت من عشاق الأفلام وتريد تتبّع جميع الأفلام التي شاهدتها في قاعدة بيانات. وللفيلم عنوان وسنة إصدار وطول بالدقائق.
وسنفترض للحظة، لأسباب تعليمية، أن لكل فيلم مخرجًا واحدًا فقط (وهو ما لا يحدث دائمًا بالطبع). وتحتاج إلى اسم المخرج وجنسيته وتاريخ ميلاده. وتريد أيضًا أن تمنح فيلمك تقييمًا (عددًا صحيحًا من 0 إلى 5).
وقد يمثل عدة ممثلين في كل فيلم. وللممثل أيضًا اسم وجنسية وتاريخ ميلاد وجنس (M أو F أو X). وإذا مثّل ممثل في فيلم، نحب أيضًا تتبّع اسم الشخصية التي أدّاها في هذا الفيلم. وإذا أدّى ممثل عدة أدوار في الفيلم، تأتي جميع الأسماء واحدة تلو الأخرى مفصولة بفواصل.
النموذج المفاهيمي
شدّدنا في قسم النمذجة على التفكير في المفاتيح الأساسية الطبيعية الممكنة في المرحلة المفاهيمية بالفعل. وهذا ليس إلزاميًا إذ توجد أيضًا منهجيات لا تفكر في المفاتيح الأساسية إلا في النموذج المنطقي. فهل عنوان الفيلم فريد في هذا الصدد؟ على الأرجح لا، كما تُظهر الكثير من إعادات الإنتاج. فهل يكون عنوان الفيلم وسنته؟ أم عنوان الفيلم ومخرجه؟ للتبسيط، نختار ببساطة film_id (أي "مفتاحًا تقنيًا"، تمامًا مثل رقم r الجامعي الفريد الخاص بك).
وللممثل والمخرج نتخذ الخيار نفسه. ويمكننا البدء بـ"المفاتيح المركّبة" من البداية، لكن ذلك يجعل الأمور أصعب قليلًا...
ارسم نموذجًا مفاهيميًا ممكنًا لقاعدة بيانات الأفلام هذه. فما أنواع الكيانات؟ وما الخواص؟ وما العلاقات؟
الحل
بوصفها أنواع كيانات، ستتعرّف بلا شك على: فيلم وممثل ومخرج، لكل منها عدد من الخواص. وعلاقة الممثل بالفيلم هي "يمثل في"، والمخرج يخرج فيلمًا. ويمكن أن يبدو النموذج المفاهيمي هكذا:

ولعل الأمر الصعب الوحيد في هذا النموذج هو الخاصية "Role" في العلاقة بين "Actor" و"Movie". فلو جعلتها خاصية لنوع الكيان "Actor"، لما أمكن لكل ممثل أن يؤدي سوى دور واحد...
وأما التعدديات، ففيها بعض الجدل. فهل تكون ممثلًا حتى لو لم تمثل في أي فيلم؟ وكذلك الحال للمخرج. وفي نموذجنا المبسّط، لكل فيلم مخرج واحد بالضبط.
النموذج المنطقي
بالنسبة إلى النموذج المنطقي، نقرر أن قاعدة البيانات هذه يجب أن تُنشأ في نموذج بيانات علائقي. واختيار نظام إدارة قواعد البيانات بالتحديد (MySQL أو PostgreSQL أو Oracle...) يأتي لاحقًا.
وفي هذه الخطوة، نفكر في الجداول وأنواع العلاقات بين الجداول المختلفة.
أنشئ نموذجًا منطقيًا لهذه المهمة. وفكّر في الجداول والمفاتيح وأنواع العلاقات.
الحل
العلاقة بين الفيلم والمخرج علاقة واحد إلى متعدد. فلكل فيلم مخرج واحد بالضبط، لكن قد يكون المخرج قد أخرج (صفرًا أو) عدة أفلام.
والعلاقة بين الفيلم والممثل علاقة متعدد إلى متعدد. فلكل فيلم صفر أو أكثر من الممثلين، وكل ممثل يمثل في صفر أو عدة أفلام. وأنت تعرف من فصل النمذجة المنطقية أن علاقة متعدد إلى متعدد يجب نمذجتها بـجدول ترابطي.

النموذج الفيزيائي
وأخيرًا، في خطوة النمذجة الأخيرة، نقرر استخدام PostgreSQL حتى نستطيع أيضًا تعريف أنواع البيانات المناسبة وبناء النموذج على خادم قاعدة البيانات. وفي هذه الخطوة تفيدنا أداة DBSchema.
وكالعادة: نص عمل خطوة بخطوة...
إنشاء المخطط
في النسخة الاحترافية (المدفوعة) من DBSchema، يمكنك أولًا تصميم نموذج دون اتصال وحفظه ثم مزامنته مع قاعدة البيانات. أما في النسخة المجانية، فيجب أن يوجد مخطط أولًا على نظام إدارة قواعد البيانات العلائقية ولا يمكنك حفظ النموذج دون اتصال. وهذا في الواقع ليس اعتراضًا تقريبًا على المشروع الجماعي الذي تحصل عليه في هذه الدورة، لذا نشرح الطريقة الثانية.
تحديث نوفمبر 2024: أصبح من الممكن الآن إنشاء مخطط جديد في خادم قاعدة بياناتنا في نسخة المجتمع (النسخة المجانية) من DBSchema بالنقر بزر الفأرة الأيمن في مستعرض قاعدة البيانات (على الجانب الأيسر من الشاشة) على "Schemas" ثم اختيار "Create Schema".
أنشئ أولًا مخططًا جديدًا في قاعدة بيانات مجموعتك (1TI9 وغيرها). وللقيام بذلك، شغّل pgAdmin واستخدم اتصال التجميع لإنشاء مخطط في قاعدة البيانات المناسبة باسم "rxxxxxxx-movie" (باستخدام رقم r الخاص بك). أتذكر كيف تُنشئ مخططًا جديدًا في قاعدة بيانات؟
وقد تحصل على رسالة خطأ (syntax error at or near "-") إن لم تتذكر إحاطة اسم المخطط بـعلامات اقتباس مزدوجة. وهذا غير ضروري عادةً، لكن بسبب المحرف الخاص "-" في الاسم تكون علامات الاقتباس المزدوجة إلزامية. ولو كتبت اسم المخطط بشرطة سفلية (_) لجاز لك إغفالها.
الاتصال بهذا المخطط في DBSchema
فعلنا ذلك بالفعل في بداية الفصل، انظر "الهندسة العكسية". واختر المخطط الذي أنشأته للتو!
رسم النموذج في DBSchema
نبدأ الآن من المخطط المنطقي بوصفه أساسًا للنموذج الفيزيائي. ونرسم ذلك النموذج الفيزيائي باستخدام DBSchema. وبالتزامن مع الرسم، يبني DBSchema النموذج على خادم قاعدة البيانات في المخطط.
اتبع الآن الخطوات في الفيديوهات أدناه ونفّذها بنفسك في مخططك الخاص.
ننشئ مخططًا عبر اتصال التجميع في pgAdmin، ونوصل DBSchema بهذا المخطط، ونرسم الجدول الأول:
عرّف الجدولين "actor" و"movie":
عرّف الجدول الترابطي واجعل جميع العلاقات بين الجداول صريحة بنقل المفاتيح:
وفي النهاية تنتهي بهذا النموذج الفيزيائي:

إنشاء تخصيصات في DBSchema
يمكنك تعديل الجداول في أي وقت في DBSchema، مثلًا بالنقر المزدوج عليها. وكمثال، نضيف شرطًا إضافيًا (CONSTRAINT) في جدولين:
الاستعلام عن شيفرة SQL للمخطط بأكمله وحفظها
عندما ترسم النموذج الفيزيائي، يرسل DBSchema أوامر SQL إلى خادم قاعدة البيانات. وبالمناسبة، يمكنك رؤيتها على الجانب الأيسر من نافذة DBSchema، تحت قسم "SQL History".
ويمكنك توليد شيفرة SQL كلها دفعة واحدة عبر خيار القائمة "Schema > Export Schema and data (F2)":
ثم تحصل على عدد من جمل CREATE بهذا الأسلوب:
CREATE SCHEMA IF NOT EXISTS "u0152691-movie";
CREATE TABLE "u0152691-movie".actor (
id integer NOT NULL ,
name varchar(60) NOT NULL ,
birthdate date ,
nationality char(2) NOT NULL ,
sex char(1) ,
CONSTRAINT pk_actor PRIMARY KEY ( id )
);
ALTER TABLE "u0152691-movie".actor ADD CONSTRAINT cns_actor_sex CHECK ( SEX IN ('F', 'M', 'X') );
CREATE TABLE "u0152691-movie".director (
id integer NOT NULL ,
name varchar(60) NOT NULL ,
birthdate date ,
nationality char(2) NOT NULL ,
CONSTRAINT pk_director PRIMARY KEY ( id )
);
CREATE TABLE "u0152691-movie".film (
id integer NOT NULL ,
title varchar(100) NOT NULL ,
release_year integer NOT NULL ,
duration integer NOT NULL ,
rating integer ,
director_id integer NOT NULL ,
CONSTRAINT pk_film PRIMARY KEY ( id ),
CONSTRAINT fk_film_director FOREIGN KEY ( director_id ) REFERENCES "u0152691-movie".director( id )
);
ALTER TABLE "u0152691-movie".film ADD CONSTRAINT cns_film_rating CHECK ( rating between 0 and 5 );
CREATE TABLE "u0152691-movie".actor_movie (
actor_id integer NOT NULL ,
film_id integer NOT NULL ,
"role" varchar(50) NOT NULL ,
CONSTRAINT pk_actor_movie PRIMARY KEY ( actor_id, film_id ),
CONSTRAINT fk_actor_movie_actor FOREIGN KEY ( actor_id ) REFERENCES "u0152691-movie".actor( id ) ,
CONSTRAINT fk_actor_movie_film FOREIGN KEY ( film_id ) REFERENCES "u0152691-movie".film( id )
);
ادرس هذه الشيفرة بتعمّن. وانظر بشكل خاص إلى جمل CONSTRAINT. احفظ هذه الشيفرة في ملف نصي، بامتداد .sql أو .txt. ويتيح لك هذا الملف إنشاء المخطط بأكمله دفعة واحدة في pgAdmin.
وفي الشيفرة جملة ALTER TABLE. ولا شيء خطأ في ذلك، لكنه أجمل قليلًا لو وضعت ما يأتي بعد ADD في CREATE الخاص بجدول "movie". ولسبب ما يفعل DBSchema ذلك دائمًا عبر ALTER TABLE.
ملء قاعدة البيانات بالبيانات
يدويًا بواسطة INSERT INTO
تضيف صفوفًا إلى جدول عبر جمل INSERT INTO. وقد فعلت ذلك بالفعل في فصل SQL التمهيدي.
شغّل pgAdmin وأضف يدويًا المعلومات التالية. صدر فيلم "Star Wars" في عام 1977. وطول الفيلم 121 دقيقة وأخرجه George Lucas (المولود في 14 مايو 1944). وGeorge Walton Lucas Jr. من Modesto، كاليفورنيا، الولايات المتحدة. ويمثل Harrison Ford (شيكاغو، الولايات المتحدة، المولود في 13 يوليو 1942) دور Han Solo. وكان دور الأميرة Leia للممثلة الأمريكية Carrie Frances Fisher (المولودة في 21 أكتوبر 1956، والمتوفاة في 2016). وأمنح هذا الفيلم 5 نجوم!

وفي أداة استعلامات في pgAdmin، أضف هذه المعلومات إلى مخططك. وهذه طريقة بطيئة لإضافة البيانات، لكنها نقطة بداية جيدة. فهي في النهاية تجعلك تفكر في البيانات التي ينبغي إضافتها بالضبط وبأي ترتيب.
الحل
أضف الممثلين:
INSERT INTO "u0012047-film".acteur VALUES (1,'Harrison Ford','1942-07-13','US','M');
-- ipv altijd de naam van het schema te vermelden had je ook het search_path goed kunnen zetten
INSERT INTO "u0012047-film".acteur VALUES (2,'Carrie Fisher','1956-10-21','US','V');
ثم المخرج:
INSERT INTO "u0012047-film".regisseur VALUES (1,'George Lucas','1944-05-14','US');
ويمكننا الآن ملء جدول الأفلام:
INSERT INTO "u0012047-film".film VALUES (1,'Star Wars',1977,121,5,1);
وأخيرًا يمكن إكمال الجدول الوسيط حتى نربط بين الممثلين والأفلام:
INSERT INTO "u0012047-film".acteur_film VALUES (1,1,'Han Solo');
INSERT INTO "u0012047-film".acteur_film VALUES (1,2,'Prinses Leia');
عبر ملف CSV
كتابة الشيفرة دائمًا بـ INSERT INTO ... VALUES ... أمر مضجر إلى حد ما. وفي فصل ملفات CSV نظرنا في بديل أسرع عبر استيراد ملف CSV. وأفضل ما يمكن فعله بملف CSV كهذا هو كتابته في جدول بيانات (Excel أو Libre Office أو Numbers...) ثم تحويله إلى CSV. وبالطبع يبقى هذا عملًا يدويًا، لكن إذا أردت مجموعة بيانات صغيرة لكن جيدة فقد يكون ذلك مبرَّرًا.
توليد البيانات تلقائيًا عبر موقع
إذا أردت اختبار مخططك بمئات الأفلام والمخرجين وآلاف الممثلين، فعليك الابتعاد عن كتابة المعلومات يدويًا. وإذا كنت محظوظًا حقًا فستجد مجموعة بيانات عن الأفلام والمخرجين والممثلين ويمكنك البدء منها وحذف أعمدة وتغيير أعمدة ونحو ذلك.
وفي معظم الأحيان لا تكون بهذه الحظوة...
أنت تريد بيانات تبدو واقعية للاختبار. ولا يلزم أن يكون الممثلون موجودين فعلًا، ما دامت هناك سلسلة يمكن أن تكون اسمًا وتاريخ ميلاد ممكنًا ونحو ذلك.
ولتوليد هذا النوع من بيانات الاختبار توجد بالطبع برمجيات. وكمثال، لنلقِ نظرة على ChatGPT وموقع https://mockaroo.com. وفي النسخة المجانية من mockaroo يمكنك توليد ما يصل إلى 1000 صف لكل جدول.
وجداول "actor" و"director" سهلة، لأنها لا تعتمد على أي جدول آخر. وكمثال، يوضح الفيديو التالي كيفية توليد 1000 صف لجدول "director".
والجدولان الآخران ("movie" و"actor_movie") أصعب قليلًا لأنهما يعتمدان على جداول أخرى عبر مفتاح أجنبي (FK، السهم الأزرق في المخطط). ولا يزال تزويد جدول "movie" بالبيانات سهلًا نسبيًا. فلكل فيلم عدد من الأعمدة الواضحة وعمود "director_id". وهذا العمود الأخير "مفتاح أجنبي" لأنه يشير إلى عمود "مفتاح أساسي" في جدول آخر (جدول "director"). افترض أن لديك بالفعل 100 مخرج (= 100 صف في جدول "director")، فمن المرجح أنك منحتهم أرقامًا من 1 إلى 100 كمعرّفات. فيمكنك أن تجعل العمود "director_id" عددًا صحيحًا عشوائيًا مولّدًا من 1 إلى 100.
وللجدول الترابطي "actor_movie" يمكنك فعل شيء مشابه. افترض أن لديك 100 فيلم و500 ممثل. فبالنسبة إلى "film_id" تولّد في Mockaroo عددًا صحيحًا عشوائيًا من 1 إلى 100، وبالنسبة إلى "actor_id" الأمر نفسه لكن حتى 500. ولكن تظهر الآن المشكلة: فتركيب "movie_id" و"actor_id" هو مفتاح أساسي مركّب. أي أن تركيب القيمتين يجب أن يكون فريدًا. غير أنك إن تركت Mockaroo يولّد 1000 تركيبة للقيمتين، ستلاحظ أن بعض التركيبات تظهر أكثر من مرة على الأرجح. ونتيجة لذلك، ستعطي جمل INSERT INTO التي تستخرجها من Mockaroo خطأ عند لصقها وتنفيذها في pgAdmin. ولن يُدخل أي شيء. ولحسن الحظ، سترى في pgAdmin رسالة الخطأ من نظام إدارة قواعد البيانات تشير إلى السطر الذي يحدث فيه الخطأ. ويمكنك حذف ذلك السطر وإعادة كل شيء في pgAdmin وحذف السطر المكرر التالي ونحو ذلك. مزعج بعض الشيء لكنه ممكن.
توليد البيانات تلقائيًا في DBSchema
تحتوي النسخة المدفوعة من DBSchema (وتذكّر أنك تحصل على الأسبوعين الأولين بعد التثبيت مجانًا على سبيل التجربة، ويمكنك التمديد أسبوعين آخرين بعد ذلك) على مولّد بيانات. ويعمل بصورة مشابهة لـ Mockaroo. والفرق الكبير أن DBSchema يتصل فعلًا بقاعدة البيانات ويمكنه تنفيذ جمل الإدراج المولّدة تلقائيًا.
وهذه الميزة بالتحديد تجعل إدراج البيانات في الجداول الوسيطة هنا أجمل بكثير مما هي عليه في أدوات مثل Mockaroo. ففي Mockaroo كان عليك أن ترى بنفسك ما المفاتيح الأساسية في "actor" و"director" (أعداد من 1 إلى...). أما DBSchema فيعرف ما المفاتيح الأساسية وسيختار واحدًا منها عشوائيًا. ومع الجداول الوسيطة يحدث الشيء نفسه. ومرة أخرى، سيحدث حتمًا أن يولّد تركيبة ممثل وفيلم موجودة بالفعل في قاعدة البيانات. غير أن DBSchema يواصل توليد صفوف أخرى حتى الوصول إلى العدد المطلوب. فلا تُضاف المكررات ببساطة إلى قاعدة البيانات ويتخطى المولّد هذه التركيبة.
ونعرض توليد البيانات في DBSchema. وإذا تعذّر اختيار عنصر القائمة "data generator"، فأنت إذن تستخدم نسخة المجتمع المجانية من DBSchema. وربما تستطيع عندئذ استخدام نموذج على موقع DBSchema لطلب نسخة احترافية إضافية لمدة أسبوعين.