2010-02-12 6 views
4

J'ai une relation many-to-many entre deux tables: Order et Item. Je dois enregistrer une information supplémentaire sur cette relation, la quantité.Relation many-to-many avec valeur optionnelle?

Donc, je dois créer une table supplémentaire dans mon modèle .xcdatamodel?

Dans le schéma suivant, les deux orderItems sont liés à la table OrderItem. order & item sont des relations inverses.

Order (start, end, orderItems) 
Item (name, orderItems) 
OrderItem (quantity, order, item) 

Modifié:

Ainsi, selon Randy, est-ce que vous proposez?

Order (start, end, orderItems) 
Item (name, quantity, orders) 

orderItems des points à Item comme à plusieurs, l'relationshipo inverse est orders, orders des points à Order comme à-plusieurs

Répondre

3

Il n'y a pas besoin de créer une table supplémentaire. Il est acceptable d'avoir une table d'association M2M contenant des colonnes autres que les références FK aux deux tables. Parfois, une colonne supplémentaire dans la table d'association M2M est parfaitement logique.

+0

salut, je édité la question, pouvez-vous conférer sur le schéma! merci –

+0

@Hoang - Oui, ça me va bien. La table OrderItem contient une référence à la table Order, une référence à la table Item et une colonne Quantity pour contenir la quantité pour l'association. –

+0

Salut Randy, pourquoi vous avez mentionné à nouveau Table OrderItem dans le commentaire? J'ai modifié la question pour supprimer la table OrderItem, et vous avez dit oui, cela semble bien. Peut-être que je n'ai pas totalement compris votre idée? –

3

Je suis assez sûr que la question que vous posez est:

Alors, je dois créer une entité supplémentaire dans mon .xcdatamodel modèle?

Et la réponse est OUI. Vous avez besoin d'une troisième entité "OrderItem".

comme vous l'avez décrit:

  1. Un élément de commande a exactement un ordre et un article.
  2. Les commandes ont beaucoup d'articles de commande et les articles sont utilisés par de nombreux articles de commande.

Commander < - >> OrderItem < < -> Article

L'attribut de quantité va dans l'entité OrderItem. Cela ne signifie pas que vous créez un supplémentaire table. Si vous utilisez SQLite pour le stockage, les données de base utilisent de toute façon une table supplémentaire pour la relation plusieurs-à-plusieurs.

Typiquement avec Core Data, vous allez concevoir et utiliser un modèle de données qui répond à vos besoins. Vous ne devriez pas y penser en termes de SQL ou de tables. En fait, il n'a même pas besoin d'utiliser SQL pour le stockage.

+0

oui, vous avez effacé mon doute maintenant! merci gerry –

0

Je suis avec le même problème. Lorsque nous créons une relation plusieurs-à-plusieurs dans les données de base, cela crée une table de relations, n'est-ce pas? Y at-il un moyen de mettre l'information (attribut de relation) dans cette table ???

J'ai déjà pensé aux deux façons, mais aucune d'entre elles ne semble être la meilleure. S'il vous plaît, corrigez-moi si j'avais tort ... J'essaie aussi de modéliser mon application.

1) Il a résolu le problème, mais n'utilise pas la relashionship many-to-many de Core Data.

Order (start, end, orderItems) 
Item (name, orderItems) 
OrderItem (quantity, order, item) 

Je préfère cela parce qu'il ne fait double emploi avec les lignes.

2) De cette façon, nous répliquons les données, n'est-ce pas? Parce que si vous avez le même article dans plus d'un ordre, vous avez plus d'une ligne avec les informations de nom. Et le problème augmente si l'article a plus de colonnes comme description ... La description sera répliquée.

Order (start, end, orderItems) 
Item (name, quantity, orders) 

3) Je lis maintenant le "Core Data" Manuel et de la pensée dans une autre possibilité que ce soit égal la solution 2 dans la base de données:

Order (start, end, orderedItens) 
Item (name, description, ...) 
OrderedItem (quantity, order) 

parent de OrderedItem = article

   Item 
       ^
       | 
Order <--->> OrderedItem 

Modèle à http://www.freeimagehosting.net/uploads/f6ca00bc2f.png

+0

salut, gerry3 a la réponse, vous devez créer la nouvelle entité. –

+0

Je sais que je dois créer une autre entité, mais je pensais que c'était le moyen le plus élégant et le plus économique ... – wal

Questions connexes