.NET مجموعة أدوات الترحيل قاعدة البيانات
-
05-09-2019 - |
سؤال
بلدي مشروع الحيوانات الأليفة الحالي هو مكتبة ترحيل قاعدة بيانات مستقلة في اللغة (Wizardby. على رمز Google). إنه مستوحى إلى حد كبير من هجرة Activerecord، ولكن لديه عدد قليل من النيقطين. على سبيل المثال، يقوم ببعض "الاستدلال" الأساسي "حتى لا تضطر إلى تحديد نوع عمود FK. إنه أيضا ذكي بما فيه الكفاية لتوليد البرامج النصية "devagrade" تعطى فقط تسلسل "ترقية" فقط. على الرغم من أن الهجرة مكتوبة في DSL خاصة، إلا أن هذه الأداة تهدف في المقام الأول إلى مشاريع .NET. انها أيضا قاعدة بيانات منصة مستقلة.
إليك لمحة سريعة عن بناء الجملة:
migration "Blog" revision => 1:
type-aliases:
type-alias N type => String, length => 200, nullable => false, default => ""
defaults:
default-primary-key ID type => Int32, nullable => false, identity => true
version 1:
add table Author:
FirstName type => N
LastName type => N
EmailAddress type => N, unique => true
Login type => N, unique => true
Password type => Binary, length => 64, nullable => true
add table Tag:
Name type => N
add table Blog:
Name type => N
Description type => String, nullable => false
add table BlogPost:
Title type => N
Slug type => N
BlogID references => Blog
AuthorID references => Author
add table BlogPostTagJunction primary-key => false:
BlogPostID references => BlogPost
TagID references => Tag
version 2:
add table BlogPostComment:
BlogPostID references => BlogPost
AuthorEmailAddress type => N
Content type => String, nullable => false
version 3:
add table Media:
TypeID type => Int32
Name type => N
MimeType type => N
Length type => Int32
BlogPostID nullable => true, references => BlogPost
BlogPostCommentID nullable => true, references => BlogPostComment
add table User:
Login type => String, length => 200, nullable => false
Password type => Binary, length => 64, nullable => false
index IX_Login columns => [ID, [Login, desc]], unique => true
version 4:
add table Forum:
Name type => String, length => 200, nullable => false
add column ModeratorUserID nullable => false, references => User
version 5:
remove index IX_Login table => User
version 6:
add index IX_Login table => User, columns => [ID, [Login, desc]], unique => true
version 7:
BlogAuthorJunction primary-key => false:
BlogID references => Blog
AuthorID references => Author
execute native-sql upgrade-resource => InsertSeedData, downgrade-resource => DeleteSeedData
أنا أدرك مكتبات الترحيل الأخرى هناك، لكن مهلا، إنها مشروع حيوانات أليفة!
السؤال هو: ما هي الميزات التي تتوقعها من أدوات ترحيل قاعدة البيانات بشكل عام وماذا يمكنك أن تقول عن بناء جملة جرو معين؟
المحلول
من نظراتها، يجب أن أقول أنه من السهل اتباعها بشكل رائع والهيكل بشكل عام يبدو نظيفا جدا.
أكبر الميزات التي أبحث عنها في شيء مثل هذه كما يلي.
- القدرة على إجراء تغييرات في المعاملة للتراجع يجب أن تكون هناك مشكلة. (سلامة البيانات أو غير ذلك)
- القدرة على رؤية البرامج النصية SQL التي تم إنشاؤها الفعلي يجب أن تنشأ الحاجة
- التراجع التلقائي، إذا حدث فشل إلى الإصدار الأخير
لدي متطلبات أخرى فيما يتعلق بنقل المفاتيح والفهارس ومثل هذه، ولكن يبدو أنك قد تعاملت بالفعل. بالنسبة لي أنه يركز حقا على ضوابط حول التنفيذ الفعلي وخطة خاطئة سريعة صلبة!
نصائح أخرى
أنا أحب هذا بناء الجملة. في عينتك التي تركز عليها على تغيير الهيكل. ولكن ماذا عن معالجة البيانات؟
غالبا ما يكون في الترحيل، يجب أن أقوم بتعديل البيانات (على سبيل المثال أضف بعض بيانات القاموس).
أود أن أرى القدرة على التحقق من تطبيق كل مراجعة على قاعدة بيانات. لذلك قل على سبيل المثال الإصدار 3 إضافة جدول "الوسائط". منذ ذلك الحين تم إضافة الإصدارات 4 و 5 إلى قاعدة البيانات ولكن في مكان ما على طول خط "Johnny Q Expert" حذف الجدول "الوسائط". الآن يأتي الإصدار 6 الذي يحتاج إلى تغيير جدول "الوسائط" (الذي لم يعد موجودا) - قد تكون وظيفة التحقق مفيدة والتي تضمن تتويجا من جميع التغييرات التي تم إجراؤها في الإصدارات 1 من خلال 5 موجودة في قاعدة البيانات حتى يمكن أن يكون الإصدار التالي تطبق بشكل صحيح.