كم عدد الأعمدة التي يوجد بها الكثير من الأعمدة؟ [مغلق

StackOverflow https://stackoverflow.com/questions/3184478

سؤال

لقد لاحظت أن الكثير من الناس هنا يستشهدون بجداول مع 20+ (رأيت بقدر ما يصل إلى 55) في جدول واحد. الآن لا أتظاهر بأنني خبير في تصميم قاعدة البيانات ، لكنني سمعت دائمًا أن هذه ممارسة مروعة. عندما أرى هذا ، أقترح عادة الانقسام إلى جدولين مع علاقة واحدة إلى واحدة: واحدة تحتوي على البيانات الأكثر استخدامًا ، والآخر مع البيانات الأقل استخدامًا. على الرغم من أن هناك في نفس الوقت قضية الأداء المحتملة (أقل من الوصلات وما شابه). لذا سؤالي هو هذا:

عندما يتعلق الأمر بقواعد البيانات على نطاق واسع حقًا ، هل هناك بالفعل ميزة لوجود كمية كبيرة من الأعمدة ، على الرغم من حقيقة أن هذا يؤدي عادة إلى العديد من القيم الخالية؟

ما هو أكثر من نجاح الأداء: الكثير من الأعمدة مع الكثير من الفرق ، أو أقل من الأعمدة مع الكثير من الوصلات؟

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

المحلول

يعتمد تصميم الجدول على الكيان الذي يحتاج إلى تخزينه. إذا كانت جميع البيانات تنتمي معًا ، فقد يكون 50 عمودًا (أو حتى 100) هو الشيء الصحيح الذي يجب القيام به.

طالما أن الجدول تطبيع, ، لا توجد قاعدة من الإبهام فيما يتعلق بالحجم ، بصرف النظر عن إمكانيات قاعدة البيانات والحاجة إلى التحسين.

نصائح أخرى

أنا أتفق مع Oded. لقد رأيت جداول بها 500 عمود فيها ، وكانت جميع الأعمدة الموجودة فيها في المكان الصحيح. ما عليك سوى النظر في عدد الحقائق التي قد يرغب المرء في تخزينها حول كائن يومي ، وسترى قريبًا السبب.

إذا أثبتت أنها غير مريحة لتحديد كل هذه الأعمدة ، أو لتحديد الأعمدة التي يجب تحديدها عندما تكون مهتمًا فقط بنسبة صغيرة منها ، فقد تجد أنه من المفيد تحديد طريقة العرض.

كم عدد الأعمدة التي يوجد بها الكثير من الأعمدة؟

عندما تشعر أنه لم يعد منطقيًا أو صحيحًا في إضافة عمود آخر.

عموما يعتمد على التطبيق.

يتمتع ODBC بحد أقصى قدره 8000 .... وهذا حد مادي تصبح عليه الأمور محبطًا للغاية.

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

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

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

شيء آخر هو أنه يمكنك تحديد الأعمدة التي يجب إرجاعها في استعلامك وهذا سيقلل من البيانات التي يتم تمريرها إلى تطبيقك ، ولكن إذا كنت بحاجة إلى عمود واحد من جدول آخر ، فسيتعين عليك القيام بالانضمام. وفي معظم الحالات ، يكون لديك العديد من الأعمدة ، فإن احتمال تخزين كمية كبيرة من البيانات المخزنة في DB مرتفع. لذلك هذا الانضمام سوف يضر أكثر ، من الفارغ.

كل مشروع عملت عليه مختلف ، لذا يجب أن تجد التوازن لكل قصة.

إن وجود العديد من الأعمدة يؤدي إلى الكثير من الفهود (الشر) وكائن غير عملي يتم تعيين الجدول إليه. هذا يؤلم قابلية القراءة في IDE وإعاقة الصيانة (زيادة تكاليف التطوير). إذا كنت بحاجة إلى قراءات سريعة في بعض الحالات ، فاستخدم الجداول غير الطبيعية على سبيل المثال المستخدمة فقط للإبلاغ أو الاستعلامات (ابحث عن نمط "CQRS"). نعم ، يحتوي "شخص" على مليون سمات ، ولكن يمكنك تحطيم هذه الجداول أحادية الصلابة (التصميم قبل تطبيع) لمطابقة الكيانات الأصغر ("العنوان" ، "الهاتف" ، "Hobby") بدلاً من إضافة أعمدة جديدة لكل حالة استخدام جديدة. وجود كائنات صغيرة الحجم (والجداول) يجلب الكثير من المزايا ؛ أنها تمكن أشياء مثل اختبار الوحدة ، OOP ، والممارسات الصلبة.

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

ما هو أكثر من نجاح الأداء: الكثير من الأعمدة مع الكثير من الفرق ، أو أقل من الأعمدة مع الكثير من الوصلات؟

إنه يعتمد بحتة على البيانات التي تقوم بتخزينها ، وفهارس تصنعها وما إلى ذلك. لا يمكن لأحد أن يضمن لك أن يعمل أحد أفضل من الآخر دون معرفة ما الذي تخزنه. عمومًا ، ستعمل قواعد التطبيع "على تفكيك البيانات إلى جداول مختلفة و fkeys المستخدم إذا كان لديك جدول كبير ولكني لا أوافق على أنه يؤدي دائمًا أفضل من جدول كبير. يمكنك أن تنتهي مع 6-7 مستوى ينضم في العشرات من الاستعلامات التي ستؤدي أحيانًا إلى حدوث أخطاء لأن هناك فرصًا أكبر بكثير لإنشاء خطأ في استعلامات أكبر في الاستعلامات البسيطة.

إذا قمت بنشر بعض المتطلبات لما تفعله ، فربما يمكننا مساعدتك في تصميم DB بشكل صحيح.

كما أنه يعتمد بشدة على USECASE لجدولك. إذا كنت ترغب في تحسينه للقراءة ، فقد يكون من الجيد الاحتفاظ بها جميعًا في جدول واحد.

في عالم NO-SQL (Cassandra/HBase على سبيل المثال) ، لا توجد قيود على عدد الأعمدة ، وهي في الواقع ممارسة جيدة لديها العديد من الأعمدة. يأتي هذا أيضًا من الطريقة التي يتم تخزينها (بدون فجوات). يستحق أثناء التحقيق.

ما الذي تحتاجه العمل الذي يتطلب أكثر من 60 عمودًا في أي مجموعة بيانات ، ناهيك عن جدول TSQL؟ إذا كانت هناك مثل هذه الحاجة التجارية ، فسيكون المحور في النظام ، ويجب أن تكون الأعمدة صفوفًا. على سبيل المثال ، في صناعة التعدين ، قد يكون هناك 600 قياسات مختلفة يتم إجراؤها في اختبار. يمكن أن يكون اسم كل قياس اسم عمود. ولكن لماذا إنشاء جدول مع 600 عمود وصفوف من القياسات؟ سيقوم الجيولوجي بقياس المنجم كل يوم ، وربما ، ويملأ سجل 600 عمود على صف واحد. هذا يبدو لي مثل أن الجيولوجي سيفقد عقله ، ولن يجد ورقة طويلة بما فيه الكفاية. ربما ستعمل لفة ، ولكن بعد ذلك سيتعين عليه إلغاء لفه ولفه مرة أخرى.

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

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

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