سؤال

كيف سيكون هيكل واحد طاولة كيان يمكن أن يكون واحدا من العديد من العلاقة نفسها ؟ على وجه التحديد, أنا أعمل على التطبيق لتتبع تربية الحيوانات.كل حيوان لديه معرف ؛ انها حصلت أيضا على المولى معرف باريس الهوية.لذا من الممكن أن يكون واحدا من العديد من المولى أو من باريس إلى ذرية.وأنا أميل إلى أن شيئا من هذا القبيل:

ID INT NOT NULL PRIMARY KEY
SIRE_ID INT 
DAME_ID INT

وتسجيل قيمة فارغة لتلك الحيوانات التي تم شراؤها إضافة إلى تربية الماشية و معرف في الجدول للراحة.

لذلك:

  1. شخص ما يمكن أن تشير لي إلى المادة/صفحة ويب الذي يناقش النمذجة هذا النوع من العلاقة ؟
  2. يجب أن يكون معرف الباحث أو نوعا من السلسلة ؟ فارغة في الباحث أن تشير إلى أن هذا الحيوان لا الآباء في قاعدة البيانات ولكن سلسلة مع العلم القيم يمكن أن يكون تستخدم للإشارة إلى نفس الشيء.
  3. أن هذا ربما يكون أفضل غرار عن طريق اثنين من الجداول ؟ أعني طاولة واحدة للحيوانات منفصل الجدول فقط مشيرا إلى القرابة هـ.ز.:

    الحيوان

    ID INT NOT NULL PRIMARY KEY

    القرابة

    ID INT NOT NULL PRIMARY KEY المفاتيح الخارجية

    SIRE_ID الباحث المفتاح الأساسي الأجنبية الرئيسية

    DAME_ID الباحث المفتاح الأساسي الأجنبية الرئيسية

أعتذر عن ما سبق:my SQL هو صدئ.اتمنى انها نوع من ينقل ما أفكر فيه.

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

المحلول

حسنا, هذا هو "طبيعي" واحد لكثير العلاقة وطريقة تقترح هو واحد الكلاسيكية على حلها.

علما أن اثنين من الجداول denormalized (لا أستطيع النقطة بالضبط حيث superkey-هو-لا-حسنا-أن-تكون-فرعية-من-أخرى-الرئيسية-fsck-لقد نسيت جزء هو, ولكن أنا متأكد من أنها هناك في مكان ما);بديهية السبب هو أن tuple في أول مباريات في معظم tuple في ثانية واحدة ، لذلك لم يكن لديك الكثير من الحيوانات مع null مولاي و باريس معرفات ليس حلا جيدا في أي احتمال (كانت تزداد سوءا الأداء -- تحتاج إلى الانضمام -- ولا تقلل من متطلبات التخزين).

نصائح أخرى

أعتقد أن التصميم الخاص بك باستخدام مائدة واحدة فقط على ما يرام.أنت بالتأكيد تريد أن تبقي SIRE_ID و DAME_ID في نفس نوع البيانات كما ID.أنت أيضا تريد أن تعلن لهم المفاتيح الخارجية (فمن الممكن أن يكون مفتاح خارجي نقطة العودة إلى طاولة واحدة ، و الأجنبية الرئيسية كما يمكن أن تكون فارغة).

ID INT NOT NULL PRIMARY KEY
SIRE_ID INT REFERENCES TABLENAME (ID)
DAME_ID INT REFERENCES TABLENAME (ID)

باستخدام هذا التصميم ، يمكنك بسهولة البحث عن الوالد الحيوانات و يمكنك أيضا بناء ذرية شجرة معينة الحيوان (Oracle هناك اتصال من قبل)

سألت سؤال مماثل قبل عدة أشهر على موقع ماي.أود أن أوصي بأن عليك أن نلقي نظرة على الاستجابة التي تلقيتها من بيتر براولي بخصوص هذا النوع من العلاقة: http://forums.mysql.com/read.php?135,187196,187196#msg-187196

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

البديل المقترح العمارة (التي ستكون بالكامل تطبيع) سوف ننظر بشيء من مثل ما يلي:

الجدول:الحيوان

رقم | اسم | تولد

الجدول:نسب

animal_id | parent_id | parentType (إما المولى أو باريس)

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

أنا لا أرى أي فائدة في تقسيم التصميم إلى جدولين.

أنا لا أعرف عن تربية الحيوانات, ولكن هذا يبدو وكأنه Sire_ID هو الأب و Dame_ID الأم ؟ لا توجد مشكلة.صف واحد لكل حيوان, null sire_ و dame_ID من أجل شراء الحيوانات لا فورسي أي مشاكل.

[ID],[Sire_ID],[Dame_ID];
0,null,null  (male)
1,null,null  (female)
2,null,null  (female)
3,0,1 (male)
4,0,2 (male)
5,null,null  (female)
6,3,5
7,4,5

وهكذا دواليك.يمكن أن تعيش على TreeView أو XmlNodeList في حين حلقة...

While (myAnimal.HasChildren) {
 Animal[] children = GetChildren(Animal.ID)
 for (int x=0; x<children.length; x++) 
  myAnimal.Children.Add(children[x]);
}

في هذه الحالة الحيوانية.الأطفال هي عبارة عن مجموعة من الحيوانات.ولذلك myAnimal.الأطفال[0].الأب سيعود myAnimal..الوالدين[] يمكن أن يكون مجموعة من اثنين من الآباء ، والتي يجب أن تعمل طالما [0] هو دائما أحد الوالدين (الأب) و [1] هو دائما الأخرى (الأم).

جعل ID "ترقيم تلقائي" PK وتعيين Sire_ID و Dame_ID برمجيا من خلال العودة معرفات من والديه.لا علاقات المفاتيح الخارجية يجب أن تكون الضروره على الرغم من كلا الوالدين معرفات يمكن الإشارة إلى معرف إذا كنت تريد حقا أن.

استخدام "الاتصال" شرط مع SQL أن أقول ذلك مما الهرمي إلى متابعة.

انها ليست حقا واحدة من العديد من علاقة إلا حيوان يمكن أن يكون العديد من الآباء والأمهات.

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

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

يبدو أنك ترغب في بناء شيء مثل شجرة.

ماذا عن شيء من هذا القبيل؟:

 ID          Primary Key,
 Parent_ID   Foreing_Key
 ( data )

هناك بعض الوظائف للقيام querys في الجداول مع العلاقات إلى أنفسهم.ترى جملة الاتصال عن طريق: http://www.adp-gmbh.ch/ora/sql/connect_by.html

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