إعداد الجدول الموصى به من أجل واحد إلى العديد من الموقف
-
06-09-2019 - |
سؤال
أحتاج إلى إنشاء برنامج نصي حيث سيقوم شخص ما بنشر فتحة للموقف، وأي شخص مؤهل سيشهد الافتتاح ولكن أي شخص ليس (أو OPTS) لن يرى الافتتاح. لذلك يمكن لشخصين الذهاب إلى نفس الصفحة وشاهد محتوى مختلف، وبعضها يحتمل أن يكون نفسه فريدا تماما. لست متأكدا من أفضل طريقة لترتيب تلك البيانات في MySQL DB / TABLE.
على سبيل المثال، كان بإمكاني ترتيبها من خلال النشر، لكن ذلك سيبدو نوعا مثل:
PostID VisibleTo
PostingA user1,user2
وهذا يبدو خطأ (نمط CSV في العمود). أو يمكنني الذهاب مع شخص:
User VisiblePosts
user1 posting1، posting2
لكنها نفس المشكلة. هل هناك طريقة لجعل المستخدم فريد من نوعه، والنشر الفريد، وانضم لهم فقط إلى أين تتطابق؟
يتم اتخاذ القرار في البداية من خلال إجراء سلسلة من الاستفسارات إلى مجموعة أخرى من الجداول، ولكن بمجرد تشغيله، يبدو أنه غير فعال لإجراء بعض قطع التعليمات البرمجية مرارا وتكرارا عندما لن يتغير المستخدم بعد مشاركة المستخدم.
. سيناريو؟
المحلول
هذه علاقة كثيرة كثيرة أو N: M العلاقة.
سوف تخلق طاولة إضافية، قل PostVisibility
, مع عمود PostID
و UserID
. وبعد إذا كان مزيج من PostID
و UserID
موجود في الجدول، هذا المنصب مرئي لهذا المستخدم.
نصائح أخرى
ثلاثة طاولات ...
المستخدم: [userid] [otherfield
المشاركة: [postid] [otherfields
userpost: [userid] [postid
user.userid ينضم إلى userpost.userid، post.postid ينضم إلى userpost.postid
ثم ابحث عن الجدول UserPost، والانضمام إلى المشاركة عند تحديد المشاركات التي تظهر
تحرير: عذرا، أعتقد أنك تتحدث في شروط نشر المستخدم، والتي هي كثير إلى كثير. كنت أفكر في ذلك من حيث شروط النشر - "حقوق المشاهدة"، والتي هي واحدة إلى كثير.
ما لم أفتقد شيئا ما، فهذا موقف واحد إلى كثير، يتطلب طاولتين. على سبيل المثال، كل نشر لديه المستخدمين الذين يمكنهم عرضه. المنشورات فريدة من نوعها للمستخدم الفردي، لذلك لا تحتاج إلى القيام بالعكس.
postingtable مع postingid (والبيانات الأخرى)
postingviVileTable مع postingid و userid
Usertable مع معرف المستخدم وبيانات المستخدم
قم بإنشاء المنشورات بشكل مستقل عن حقوق الرؤية الخاصة بهم، ثم إضافة / إزالة / إزالة أزواج poadsid / userid بشكل منفصل مقابل جدول الرؤية.
لتحديد جميع المنشورات مرئية للمستخدم الحالي:
SELECT * FROM PostingTable A INNER JOIN PostingVisibilityTable B ON A.PostingID = B.PostingID WHERE B.UserID = "currentUserID"