it-swarm.asia

كيف يمكن لمجموعة مخطط قاعدة بيانات تعقب التغييرات؟

ما هي منهجيات التحكم في الإصدار التي تساعد فرق الأشخاص على تتبع تغييرات مخطط قاعدة البيانات؟

68
Toby

قبل دقيقتين فقط ، كنت أتحقق من هذا: جدول يجب أن يكون موجودًا في جميع المشاريع بقاعدة بيانات ، يبدو بسيطًا بما يكفي لوضعه موضع التنفيذ ، تحقق منه:

يطلق عليه schema_version (أو عمليات الترحيل ، أو أي شيء يناسبك) والغرض منه هو تتبع التغييرات الهيكلية أو تغييرات البيانات في قاعدة البيانات. الهيكل المحتمل (مثال في MySQL) هو:

create table schema_version (
     `when` timestamp not null default CURRENT_TIMESTAMP,
     `key` varchar(256) not null,
     `extra` varchar(256),
     primary key (`key`)
) ENGINE=InnoDB;

إدراج في قيم schema_version (key ، extra) ("001" ، "إصدار المخطط") ؛

سواء قمت بإضافة هذا الجدول من بداية المشروع أو بعد نشر الإصدار الأول إلى خادم مرحلي أو خادم إنتاج ، فالأمر متروك لك.

عندما تحتاج إلى تنفيذ برنامج نصي SQL لتغيير بنية قاعدة البيانات أو إجراء ترحيل البيانات ، يجب عليك إضافة صف في هذا الجدول أيضًا. ونفعل ذلك من خلال عبارة إدراج في بداية هذا البرنامج النصي أو نهايته (وهو ملتزم بمستودع رمز المشروع).

...

45
eiefai

أعتقد أن أفضل طريقة هي الحصول على قاعدة البيانات التي تم إنشاؤها كجزء من عملية البناء . احتفظ بكل البرامج النصية في التحكم بالمصادر مع بقية التعليمات البرمجية ، وكل شخص مسؤول عن بيئاته الخاصة.

إذا فشل ذلك ، فإن RedGate لديه أداة لدمج التحكم بالمصادر في SSMS و مقارنة SQL مفيد لمقارنة/مزامنة مخططات MS SQL Server. Visual Studio Database Edition يحتوي أيضًا على أداة مقارنة المخطط المضمنة .

آخر سؤال SO يقودني إلى Migrator Dot Net الذي سأبدأ في التحقيق فيه خلال وقت فراغي الغزير. يبدو أنها طريقة جيدة ، ولكنها قد تكون استثمارًا في الوقت/النفقات العامة أكثر مما ترغب في القيام به.

23
Larry Smithmier

ذكر eiefai بالفعل جدول يجب أن يكون موجودًا في جميع المشاريع بقاعدة بيانات . هذه مشاركة مدونة رائعة ، لكن المنظمة البحرية الدولية لا تذهب إلا إلى جزء من الطريق إلى حل عملي للتحكم في مراجعة قاعدة البيانات. أعتقد أن أي محاولة للإجابة على هذا السؤال في العالم الحقيقي تحتاج إلى النظر في بعض المعلومات الأخرى حول VCS وقواعد البيانات:

12
TML

أعتقد أن هناك زوايا مختلفة للتعامل مع هذا السؤال. أعتقد أن زاوية "الأداة أولاً" ستختلف بناءً على النظام الأساسي والتفضيل الشخصي. مثال على ذلك: أستخدم مشروع قاعدة بيانات في MS Visual Studio ، لكنني لست متأكدًا من أن هذا حل رائع لـ MySQL. أنا أعرف أيضًا الأشخاص الذين يتم بيعهم بشكل جميل على أدواتهم المفضلة من Redgate و Erwin و Embarcadero وما إلى ذلك.

هناك أيضًا زاوية "العملية الأولى" لهذا السؤال ، والتي (نأمل) أن تتم إعادة النظر فيها على هذا الموقع في الأسئلة اللاحقة. تتمثل العناصر الأساسية في هذه العملية في جعل مخططك تحت التحكم بالمصادر وإدارة التغييرات بحيث يمكنك تطبيق تغييرات المخطط من الإصدار "x" إلى الإصدار "y" إلى حد كبير عند الطلب.

الإجابة النهائية على هذا الموضوع ستنتهي في نهاية المطاف وكأنها كتاب ، لذا من المحتمل أن تبدأ بالرجوع إلى كتاب: نشر Redgate مؤخرًا كتابًا إلكترونيًا مجانيًا يسمى " دليل البوابة الحمراء للتطوير المستند إلى فريق SQL Server "، وفي حين أن هناك الكثير للمناقشة ، إلا أنه مكان جيد لبدء النقاش ، IMO. على عكس الاسم ، فإن الكثير من المواد في هذا الكتاب عامة بما يكفي لتطبيقها على أي قاعدة بيانات (وليس فقط SQL Server) وأي مجموعة أدوات (وليس فقط Redgate). إذا لم تكن قد رأيت هذا بالفعل ، فمن المؤكد أنه يستحق القشط ، على الأقل.

أخيرًا ، ربما يستحق الربط في "الإجابة القديمة" من stackoverflow .

8
D. Lambert

SchemaCrawler هي أداتي لإنتاج ملف نصي بكافة كائنات مخطط قاعدة البيانات. لقد صممت إخراج النص هذا ليكون قابلاً للقراءة البشرية ، بالإضافة إلى إمكانية الاختلاف مقارنة بالإخراج المماثل من خادم آخر.

عمليًا ، ما وجدته هو أن إخراج ملف نصي من مخطط قاعدة البيانات مفيد ، عندما يتم ذلك كجزء من البناء. وبهذه الطريقة ، يمكنك التحقق من الملف النصي في نظام التحكم في التعليمات البرمجية المصدر ، والحصول على تاريخ إصدار لكيفية تطور مخططك بمرور الوقت. تم تصميم SchemaCrawler لأتمتة هذا أيضًا ، من سطر الأوامر.

5
Sualeh Fatehi