نمذجة المواقع الجغرافية في قاعدة بيانات علائقية

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

اللغات (المعرف، اسم الموقع، معرف الوالدين) حيث توجد مواقع مستقلة (مثل البلدان، على سبيل المثال.الولايات المتحدة الأمريكية) هم آباء لأنفسهم.بهذه الطريقة يمكنني الحصول على تداخل عميق اعتباطي لـ "الوحدات السياسية" (البلد > الولاية > المدينة أو البلد > الولاية > المدينة > الجامعة).ستتضمن بعض الاستعلامات بالضرورة التكرار.

سأكون ممتنًا لأي توصيات أخرى أو ربما نصيحة بشأن المشكلات التي يمكن التنبؤ بها والتي من المحتمل أن أواجهها مع مثل هذا المخطط.

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

المحلول

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

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

نصائح أخرى

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

أعتقد أنك ربما تبالغ في التفكير في هذا.هناك سبب وراء قيام معظم الأنظمة بتخزين العناوين وربما جدول البلدان.فيما يلي بعض الأشياء التي يجب الانتباه إليها:

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

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

  3. ماذا عن الرموز البريدية؟تشمل بعض الرموز البريدية مدنًا متعددة، وفي أحيان أخرى يتم تقسيم المدينة إلى رموز بريدية متعددة.و(نادرًا) تعبر بعض الرموز البريدية حدود الولاية.(حسب ويكيبيديا على الأقل...)

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

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

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

إليك اقتراحًا لمخطط مرن جدًا.إنذار فوري:يمكن أن تكون مرنة/معقدة للغاية بالنسبة لما تحتاجه بالفعل

الموقع (الموقع ، الموقع) - لبنة البناء الأساسية

LocationGroup (الموقع GroupId ، الموقع GroupName ، ParentLocationGroupId) - يمكن أن يتغلف هذا التسلسل الهرمي المتعدد.لديك عقدة جذر واحدة ومن ثم يمكنك إنشاء عدة فروع مستقلة.على سبيل المثاليمكنك التقسيم حسب الولاية أولاً ثم إنشاء عدة تسلسلات هرمية فرعية، على سبيل المثال.الرمز البريدي/المدينة/xxxx

LocationGrouplocation (LocationId ، LocationGroupId) - إليك كيفية ربط الموقع مع تسلسل هرمي واحد أو أكثر.على سبيل المثاليمكنك ربط منزلك بـ ZIP، بالإضافة إلى مدينة...ما تحتاج إلى تنفيذه هو قيد ألا تتمكن من ربط موقع مع أي تسلسلين هرميين حيث يكون أحدهما والدًا للآخر (حيث أن العلاقة ضمنية بالفعل).

سأفكر مليًا في هذا لأنه قد لا يكون ميزة ضرورية.لماذا لا تستخدم حقل النص فقط وتسمح للمستخدمين بكتابة العنوان؟

تذكر مبدأ قبلة (أبق الأمور بسيطة يا غبي).

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

إذا كنت متأكدًا من أنك تحتاج فقط إلى بنية هرمية أساسية، فلدي الاقتراحات التالية:

  • أنا أؤيد التعليق السابق بأن عناصر مستوى الجذر لا ينبغي أن تكون هي الأصل.يجب أن تحتوي عناصر مستوى الجذر على قيمة فارغة للأصل.كن حذرًا دائمًا بشأن وضع البيانات في حقل ليس له معنى (على سبيل المثال.القيمة "الخاصة" لا تمثل أي بيانات).نادرا ما تكون هذه الممارسة بالضرورة و طريق الإفراط في استخدامها في مجتمع المطورين.
  • فكر في XPath/XML.هذا شيء يجب مراعاته عند عناء تسجيل البنية الهرمية ومعالجة/تحليل البيانات عند استرجاعها.إذا كنت تستخدم MSSQL Server، فإن تعبيرات XPath في عبارات التحديد مثالية لمهام مثل إرجاع المسار الكامل للموقع/التسلسل الهرمي للسجل نظرًا لأن التعليمات البرمجية بسيطة والنتائج سريعة.

بالنسبة للمواقع الجغرافية، قد ترغب في تحديد عنوان إلى مصفوفة خطوط الطول والعرض (ربما باستخدام خرائط Google وما إلى ذلك) لحساب الأماكن القريبة وما إلى ذلك.للتعشيش الجيوسياسي..سأختار رد KISS.

إذا كنت تريد حقًا تصميمه، فربما تحتاج إلى أن تكون الأنواع أكثر عمومية ...البلد -> الولاية -> المقاطعة -> المنطقة الإدارية -> المنطقة المحلية -> المدينة -> الضاحية -> الشارع أو صندوق البريد -> الرقم -> -> الشقة وما إلى ذلك.-> المؤسسة (الجامعة أو صاحب العمل) -> القسم -> القسم الفرعي-1 -> القسم الفرعي-ن ...هل أنت متأكد من أنك لا تستطيع القيام بـ KISS؟

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

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