<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>SQL Server | The .NET Blog</title><link>https://thedotnetblog.com/ar/tags/sql-server/</link><description>Articles, tutorials and insights from the .NET community.</description><generator>Hugo</generator><language>ar</language><managingEditor>@thedotnetblog (The .NET Blog)</managingEditor><webMaster>@thedotnetblog</webMaster><lastBuildDate>Sun, 19 Jul 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://thedotnetblog.com/ar/tags/sql-server/index.xml" rel="self" type="application/rss+xml"/><item><title>Microsoft SQL منتصف 2026: التحول الهادئ من محرك قاعدة بيانات إلى منصة بيانات AI</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</link><pubDate>Sun, 19 Jul 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/microsoft-sql-midyear-2026-agentic-shift/</guid><description>موجة تحديثات SQL لعام 2026 تظهر انتقالًا استراتيجيًا: SQL لم يعد مجرد طبقة استمرار، بل أصبح العمود الفقري التشغيلي المحكوم للتطبيقات الوكيلية.</description><content:encoded>&lt;p&gt;النصف الأول من 2026 لـ Microsoft SQL ليس مجرد قائمة إصدارات طويلة. إنه إشارة اتجاهية. SQL Server و Azure SQL و SQL database in Fabric تتقارب نحو وضعية منصة حيث البيانات والحوكمة وسير عمل AI مصممة للتعايش بدلاً من أن تُربط معًا.&lt;/p&gt;
&lt;p&gt;المصدر الأصلي: &lt;a href="https://devblogs.microsoft.com/azure-sql/whats-new-across-microsoft-sql-in-2026-so-far-sql-server-azure-sql-and-sql-database-in-fabric/"&gt;https://devblogs.microsoft.com/azure-sql/whats-new-across-microsoft-sql-in-2026-so-far-sql-server-azure-sql-and-sql-database-in-fabric/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;على طبقة المحرك، ميزات GA مثل AI_GENERATE_EMBEDDINGS وكائنات النموذج الخارجي وضوابط هوية مستوى الخادم Entra تظهر أن &amp;ldquo;AI في سير عمل قاعدة البيانات&amp;rdquo; أصبح الآن سائدًا، وليس مجرد معاينة جديدة. على الطبقة التشغيلية، تحسينات Hyperscale و Managed Instance وخيارات تشفير أقوى وتحديثات CU منتظمة تشير إلى أن انضباط الموثوقية والأمان الكلاسيكي لا يزال سليمًا.&lt;/p&gt;
&lt;p&gt;قصة الأدوات مهمة بنفس القدر. SSMS يحصل على وضع وكيل Copilot ومقارنة المخطط وتحسينات منسق SQL وسياق تنفيذ أغنى. إضافة MSSQL في VS Code تواصل دفع دفاتر الملاحظات وتصميم المخطط بمساعدة AI وتكامل DAB وسير عمل توفير Azure. هذا الاستثمار ثنائي المسار يقول إن Microsoft تتوقع من المطورين البقاء متعددي اللغات في اختيار IDE مع التوحيد على قدرات مستوى البيانات المشتركة.&lt;/p&gt;
&lt;p&gt;أقوى رأيي: SQL MCP Server هو الاتجاه المركزي. بمجرد أن يتم كشف كيانات SQL بشكل آمن كواجهات قابلة للأدوات للوكلاء، تتوقف قاعدة البيانات عن كونها تخزينًا سلبيًا وتصبح مشاركًا نشطًا في التنسيق. هذا يخلق رافعة جديدة، لكنه يرفع أيضًا معيار الهندسة الأمنية ونشر الهوية وقابلية التدقيق.&lt;/p&gt;
&lt;p&gt;ما الذي يجب أن تفعله الفرق الآن؟&lt;/p&gt;
&lt;p&gt;اختر مسار ترحيل واحد ونفذه بقوة. إما حدث مسار المخطط/التطوير الخاص بك حول SQL Projects بالإضافة إلى CI/CD، أو ركز على حوكمة جاهزة لـ MCP وضوابط الوصول إلى البيانات. محاولة استيعاب كل إعلان ميزة بالتوازي ستعطل التوصيل. أيضًا، أنشئ خط أساس هوية واحد مع مصادقة Entra حيثما أمكن. أنماط المصادقة المختلطة هي أسرع طريق لتنفيذ سياسات غير متناسق.&lt;/p&gt;
&lt;p&gt;أخيرًا، تعامل مع تحديثات النظام البيئي للمشغلات كعمل حاسم للإنتاج، وليس ضجيج صيانة. SqlClient و ODBC و OLE DB وموصلات Python ومحولات Django — جميعها شحنت تغييرات موثوقية وتوافق هادفة. إذا كانت مكدس تطبيقك يمتد عبر اللغات، فإن موثوقية بياناتك قوية فقط بقدر أقل مشغل مُحدّث في الإنتاج.&lt;/p&gt;
&lt;p&gt;هذه هي الرسالة الحقيقية لعام 2026 حتى الآن: Microsoft SQL يصبح النواة التشغيلية للأنظمة الوكيلية. الفرق التي تحدث مع وضع الحوكمة في الاعتبار ستتحرك أسرع. الفرق التي تطارد الميزات دون انضباط منصاتي ستراكم تعقيدًا مكلفًا.&lt;/p&gt;</content:encoded></item><item><title>SQL Server 2025 كقاعدة بيانات جاهزة للوكلاء: الأمان والنسخ الاحتياطي وMCP في محرك واحد</title><link>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</link><pubDate>Sun, 26 Apr 2026 00:00:00 +0000</pubDate><author>Emiliano Montesdeoca</author><guid>https://thedotnetblog.com/ar/news/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/</guid><description>الجزء الأخير من سلسلة Polyglot Tax يتناول مشاكل الإنتاج الصعبة: سياسة Row-Level Security موحّدة عبر البيانات العلائقية وJSON والرسوم البيانية والمتجهات، مع مسارات تدقيق مشفّرة وتكامل MCP يجعلان SQL Server 2025 جاهزًا للوكلاء فعلاً.</description><content:encoded>&lt;p&gt;&lt;em&gt;تمت ترجمة هذه المقالة تلقائيًا. للنسخة الأصلية، &lt;a href="https://thedotnetblog.com/posts/emiliano-montesdeoca/sql-server-2025-agent-ready-security-mcp/"&gt;انقر هنا&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;لقد تابعت سلسلة Polyglot Tax من Aditya Badramraju باهتمام كبير. الأجزاء 1-3 قدّمت حجة مقنعة لصالح SQL Server 2025 كقاعدة بيانات متعددة النماذج بحق — JSON والرسوم البيانية والمتجهات والبيانات العلائقية كلها في محرك واحد مع مخطط استعلام موحّد. الجزء الرابع يختم السلسلة بالجزء الذي يحدد فعلاً ما إذا كنت ستثق بهذه البنية في الإنتاج.&lt;/p&gt;
&lt;p&gt;الخلاصة: قصة الإنتاج قوية.&lt;/p&gt;
&lt;h2 id="نموذج-أمان-واحد-لكل-نماذج-البيانات"&gt;نموذج أمان واحد لكل نماذج البيانات&lt;/h2&gt;
&lt;p&gt;هذه هي المشكلة مع البنى متعددة اللغات: عندما يسألك المدقق &amp;ldquo;أثبت أن Tenant A لا يستطيع رؤية بيانات Tenant B&amp;rdquo;، عليك الإجابة عن هذا السؤال لكل قاعدة بيانات على حدة. خمس قواعد بيانات، خمس نماذج أمان، خمس براهين.&lt;/p&gt;
&lt;p&gt;مع SQL Server 2025، يمكنك تعريف سياسة Row-Level Security واحدة تغطي كل نماذج البيانات:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;FUNCTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;RETURNS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SCHEMABINDING&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;RETURN&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SELECT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;fn_result&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WHERE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;CAST&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SESSION_CONTEXT&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;N&lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;TenantID&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;AS&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;SECURITY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;POLICY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TenantIsolation&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Customers&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Relational
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Events&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- JSON data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Relationships&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Graph edges
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ADD&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FILTER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;PREDICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;fn_TenantFilter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;TenantID&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;dbo&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;Embeddings&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="c1"&gt;-- Vector data
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;STATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;من تلك اللحظة، أي استعلام — joins علائقية، استعلامات مسارات JSON، اجتيازات الرسوم البيانية، بحث تشابه المتجهات — يُفلتر تلقائيًا حسب tenant. المحرك يحقن الشرط في خطة التنفيذ قبل أن تغادر أي بيانات التخزين. الشيفرة التي تستدعيه لا تحتاج إلى &lt;code&gt;WHERE TenantID = @id&lt;/code&gt; في كل مكان. تختبر السياسة مرة واحدة.&lt;/p&gt;
&lt;p&gt;تتراصف الطبقات كذلك: Dynamic Data Masking للأعمدة التي لا ينبغي أن ترى قيمها الكاملة بعض الأدوار، وAlways Encrypted للتشفير من طرف إلى طرف (حتى مسؤولو قواعد البيانات لا يستطيعون قراءتها)، والإجراءات المخزنة كحدّ للامتيازات بحيث لا تستدعي الوكلاء إلا ما كشفته لهم صراحة.&lt;/p&gt;
&lt;p&gt;هذا هو الجزء من البنية الذي يهم أكثر في SaaS الخاضع للامتثال. سياسة واحدة، وبُرهان واحد.&lt;/p&gt;
&lt;h2 id="نسخ-احتياطي-موحد--استعادة-ذرية"&gt;نسخ احتياطي موحّد = استعادة ذرّية&lt;/h2&gt;
&lt;p&gt;أمر واحد، كل نماذج البيانات، ونقطة زمنية متسقة:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;BACKUP&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;TO&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;COMPRESSION&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;ENCRYPTION&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;ALGORITHM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AES_256&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SERVER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;CERTIFICATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;BackupCert&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="n"&gt;RESTORE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DATABASE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MultiModelApp&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;URL&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;https://storage.blob.core.windows.net/backups/MultiModelApp.bak&amp;#39;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;STOPAT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s1"&gt;&amp;#39;2026-02-01 10:30:00&amp;#39;&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;في stack متعدد اللغات، تعني استعادة نقطة زمنية عبر خمس قواعد بيانات تنسيق خمس عمليات استعادة والأمل في أن تتطابق الطوابع الزمنية في حدود ثانية أو ثانيتين. بالنسبة للبيانات المالية، هذا التفاوت غير مقبول. مع قاعدة بيانات واحدة، وسجل معاملات واحد، واستعادة واحدة — الاسترداد ذرّي بحكم التعريف.&lt;/p&gt;
&lt;h2 id="جداول-ledger-لمسارات-تدقيق-لا-يمكن-العبث-بها"&gt;جداول Ledger لمسارات تدقيق لا يمكن العبث بها&lt;/h2&gt;
&lt;p&gt;في القطاعات المنظمة، أنت تحتاج إلى أكثر من &amp;ldquo;لدينا سجلات&amp;rdquo;. أنت تحتاج إلى دليل مشفّر على أن تلك السجلات لم تُعدّل:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" class="chroma"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;CREATE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;TABLE&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;FinancialTransactions&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;PRIMARY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;KEY&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;AccountID&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nb"&gt;INT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;Amount&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;MONEY&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NOT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;NULL&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionType&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;NVARCHAR&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;20&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;TransactionDate&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;DATETIME2&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;DEFAULT&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;SYSUTCDATETIME&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span class="line"&gt;&lt;span class="cl"&gt;&lt;span class="k"&gt;WITH&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;SYSTEM_VERSIONING&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="n"&gt;LEDGER&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="k"&gt;ON&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;كل عملية insert وupdate وdelete تُhashed تشفيريًا داخل بنية شبيهة بالبلوكشين. يمكنك أن تثبت للمدقق — رياضيًا — أن صفًا لم يتم العبث به منذ كتابته. في stack متعدد اللغات، هذه القدرة لا تتوفر بشكل موحّد عبر قواعد البيانات كلها.&lt;/p&gt;
&lt;h2 id="تكامل-mcp-وكلاء-بلا-middleware-مكتوب-يدويا"&gt;تكامل MCP: وكلاء بلا middleware مكتوب يدويًا&lt;/h2&gt;
&lt;p&gt;السلسلة كانت تتجه إلى هذا: SQL Server 2025 يدعم SQL MCP Server مباشرة، وهذا يعني أن وكلاءك يمكنهم استدعاء قاعدة البيانات عبر نداءات أدوات طبيعية دون أن تكتب middleware لكل عملية.&lt;/p&gt;
&lt;p&gt;ادمج ذلك مع الإجراءات المخزنة كحد للامتيازات وRow-Level Security المطبقة على مستوى المحرك، وستحصل على نموذج حيث:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;يستدعي الوكيل أداة، مثل &amp;ldquo;احصل على سياق العميل للحساب 12345&amp;rdquo;&lt;/li&gt;
&lt;li&gt;يترجم MCP ذلك إلى الإجراء المخزن الذي حددته&lt;/li&gt;
&lt;li&gt;يفرض محرك SQL عزل tenant وإخفاء الأعمدة تلقائيًا&lt;/li&gt;
&lt;li&gt;يحصل الوكيل على البيانات المسموح له برؤيتها فقط&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;لا توجد طبقة middleware. لا يوجد خطر حقن استعلامات عشوائية. المحرك هو من يتولى التفويض، وليس الوكيل.&lt;/p&gt;
&lt;h2 id="لماذا-يهم-هذا-لمطوري-net"&gt;لماذا يهم هذا لمطوري .NET&lt;/h2&gt;
&lt;p&gt;إذا كنت تبني خدمات .NET وSQL Server هو مخزن البيانات الأساسي لديك، فهذه الرسالة من السلسلة هي: لست بحاجة إلى إضافة Redis للتخزين المؤقت، أو قاعدة بيانات رسومية للعلاقات، أو مخزن متجهات للتمثيلات — SQL Server 2025 يتولى كل ذلك، مع اتساق تشغيلي أفضل من stack متعدد اللغات وأمان موحّد يمكن تدقيقه فعلاً.&lt;/p&gt;
&lt;p&gt;تكامل MCP يعني أن وكلاء Semantic Kernel أو سير عمل Microsoft Agent Framework يمكنهم التفاعل مع طبقة البيانات لديك عبر SQL MCP Server نفسه، وبنفس ضمانات الأمان التي ستفرضها على الاستعلامات البشرية.&lt;/p&gt;
&lt;h2 id="الختام"&gt;الختام&lt;/h2&gt;
&lt;p&gt;سلسلة Polyglot Tax تستحق القراءة من البداية إلى النهاية. الأجزاء 1-3 تثبت قصة مخطط الاستعلام. الجزء 4 يثبت قصة الإنتاج. بالنسبة لمطوري .NET الذين يبنون تطبيقات agent-first أو AI-augmented على Azure SQL، تستحق هذه البنية اعتبارًا جديًا.&lt;/p&gt;
&lt;p&gt;المقال الأصلي بقلم Aditya Badramraju: &lt;a href="https://devblogs.microsoft.com/azure-sql/the-polyglot-tax-part-4/"&gt;The Polyglot Tax – Part 4&lt;/a&gt;.&lt;/p&gt;</content:encoded></item></channel></rss>