2009-04-13 9 views
3

Comment puis-je stocker et récupérer dans la base de données SQLite plusieurs valeurs pour la même ligne de la même colonne?SQLite - stockage de plusieurs valeurs

dire j'ai une colonne de produit et une autre colonne est magasins, où je mets dans tous les magasins, où il est possible d'obtenir ce produit:

Product: iLamp; 
Stores: River's; McWay; Lonnie's; ... 

Comment puis-je mettre en œuvre ce?

Merci à l'avance.

Répondre

4

comme d'autres l'ont mentionné, vous pouvez stocker comme une chaîne séparée par des virgules, puis le mettre dans votre base de données, mais comme ocdecio mentionné, la façon dont vous avoir vos tables en ce moment est un mauvais design. Vous devriez envisager de faire quelque chose comme ajouter une autre table, comme une table PRODUCT_TO_STORE qui a deux colonnes, l'un a la clé d'un produit, et l'autre colonne a la clé d'un magasin. Ensuite, il existe une relation entre les produits et les magasins, et permet de normaliser vos données, ce qui, dans la plupart des cas, est une bonne chose. Ensuite, lorsque vous avez besoin de trouver tous les magasins d'un produit, vous pouvez simplement effectuer une requête sur cette table PRODUCT_TO_STORE.

2

Je voudrais utiliser quelque chose de simple comme JSON. Cependant c'est un mauvais design de DB car il n'est pas normalisé.

1

magasin soit comme une liste séparée par des virgules pour chaque magasin ou ajouter plusieurs lignes une pour chaque paire « Store » -Product ».

+0

Et comment utiliser plusieurs lignes? –

+0

Comme d'habitude.SELECT avec une condition de comparaison va récupérer un ensemble de lignes et vous pouvez les analyser. UPDATE et DELETE est fait de la même manière. – sharptooth

7

Si vous êtes intelligent, vous ne sera pas faire. Parce que Quand vient le temps de déterminer quels magasins stockent l'article, vos requêtes seront déformées de façon hideuse, de même que celles de votre stock contrôleront l'application quand elles essaieront d'insérer et de supprimer des magasins. Ce que vous finirez par faire, c'est ce que j'aime appeler SQL gymnastique, passer de plus en plus de temps à essayer de faire du SQL de la manière la plus bizarre, simplement en raison d'un mauvais choix de conception

Sérieusement, stockez-les dans des lignes différentes dans la base de données, comme Codd destiné.

Il est beaucoup plus facile (et plus rapide en terme de grincement de SGBD) de combiner plusieurs lignes en une seule chaîne séparée par des points-virgules que de rompre cette chaîne en éléments.

Un schéma tel que cela suffirait:

Products: 
    ProdCode integer primary key 
    ProdDesc varchar(50) 
Stores: 
    StoreCode integer primary key 
    StoreDesc varchar(50) 
StockLevels: 
    StoreCode integer \ 
    ProdCode integer/primary key 
    Count  integer 
1

Modifier le schéma.

ne pas stocker plusieurs valeurs dans la colonne de la même ligne.

ajouter une nouvelle table où les valeurs multiples peuvent être stockées dans leurs propres rangs

mauvaise table de deisgn:
parents:

ParentID, values, other columns 

bonne table design:
parent

parentID, other columns 

enfant

parentID, childID, value 
Questions connexes