سؤال

بلدي مشروع الحيوانات الأليفة الحالي هو مكتبة ترحيل قاعدة بيانات مستقلة في اللغة (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

أنا أدرك مكتبات الترحيل الأخرى هناك، لكن مهلا، إنها مشروع حيوانات أليفة!

السؤال هو: ما هي الميزات التي تتوقعها من أدوات ترحيل قاعدة البيانات بشكل عام وماذا يمكنك أن تقول عن بناء جملة جرو معين؟

هل كانت مفيدة؟

المحلول

من نظراتها، يجب أن أقول أنه من السهل اتباعها بشكل رائع والهيكل بشكل عام يبدو نظيفا جدا.

أكبر الميزات التي أبحث عنها في شيء مثل هذه كما يلي.

  1. القدرة على إجراء تغييرات في المعاملة للتراجع يجب أن تكون هناك مشكلة. (سلامة البيانات أو غير ذلك)
  2. القدرة على رؤية البرامج النصية SQL التي تم إنشاؤها الفعلي يجب أن تنشأ الحاجة
  3. التراجع التلقائي، إذا حدث فشل إلى الإصدار الأخير

لدي متطلبات أخرى فيما يتعلق بنقل المفاتيح والفهارس ومثل هذه، ولكن يبدو أنك قد تعاملت بالفعل. بالنسبة لي أنه يركز حقا على ضوابط حول التنفيذ الفعلي وخطة خاطئة سريعة صلبة!

نصائح أخرى

أنا أحب هذا بناء الجملة. في عينتك التي تركز عليها على تغيير الهيكل. ولكن ماذا عن معالجة البيانات؟

غالبا ما يكون في الترحيل، يجب أن أقوم بتعديل البيانات (على سبيل المثال أضف بعض بيانات القاموس).

أود أن أرى القدرة على التحقق من تطبيق كل مراجعة على قاعدة بيانات. لذلك قل على سبيل المثال الإصدار 3 إضافة جدول "الوسائط". منذ ذلك الحين تم إضافة الإصدارات 4 و 5 إلى قاعدة البيانات ولكن في مكان ما على طول خط "Johnny Q Expert" حذف الجدول "الوسائط". الآن يأتي الإصدار 6 الذي يحتاج إلى تغيير جدول "الوسائط" (الذي لم يعد موجودا) - قد تكون وظيفة التحقق مفيدة والتي تضمن تتويجا من جميع التغييرات التي تم إجراؤها في الإصدارات 1 من خلال 5 موجودة في قاعدة البيانات حتى يمكن أن يكون الإصدار التالي تطبق بشكل صحيح.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top