2011-02-16 7 views
2

Il s'agit davantage d'une question sur la structure que sur le langage de programmation lui-même. J'ai une connaissance très basique de SQL.Valeurs multiples SQL, conception de table

Si vous avez une table avec des produits et que chaque produit peut avoir plusieurs couleurs ou pas.

Table: Color 
Columns: Id, ColorName 

1, Black 
2, White 
3, Purple 
4, Red 

et nous avons

Table: Phone 
Columns: Id, PhoneName, PhoneManf, ColorID 

par exemple. Phone Table pourrait avoir un HTC EVO qui est disponible en noir et blanc

cela signifie-t-il que pour chaque couleur de chaque téléphone il y aurait un enregistrement. dire

1, EVO, HTC, 1 
2, EVO, HTC, 2 
3, Curve, Blackberry,1 
4, Curve, Blackberry,3 

Ou est-il un moyen d'avoir 1 dossier pour chaque téléphone où la clé de couleur est comme un tableau? Désolé si c'est une question très simple, je suis nouveau à cela et je veux m'assurer que je commence bien.

Répondre

2

simple normalisation

Table: Color 
Columns: ColorId, ColorName 
Primary Key: ColorId 

// table for the many-to-many relationship 
// between Colors and Phones 
Table: PhoneColor 
Columns: PhoneId, ColorId 
Primary Key: (PhoneId, ColorId) 
Foreign Key: PhoneId 
Foreign Key: ColorId 

Table: Phone 
Columns: PhoneId, PhoneName, PhoneManfId 
Primary Key: PhoneId 
Foreign Key: PhoneManfId 

Table: PhoneManf 
Columns: PhoneManfId, PhoneManfName, PhoneManfAddress 
Primary Key: PhoneManfId 

Toute autre information que vous avez concernant les téléphones, comme SKU devrait aller à la table Téléphone (ou modèle si vous voulez l'appeler ainsi).

Détails pour les fabricants devraient aller à la table PhoneManf, etc.

+0

merci, mal commencer et voir où je vais à partir de là :) .. hâte d'obtenir ce simple db sur le chemin. C'est une grande expérience d'apprentissage. –

2

Vous pouvez juste créer une autre table:

Table: PhoneColor 
Columns: PhoneId, ColorId 
3

Duplication des données essentielles (comme modèle de téléphone et le fabricant) juste parce qu'il est disponible sous d'autres couleurs est la redondance unecessary.

Mieux créer une table comme phone_color (IdPhone, IdColor)

+0

Dans le monde réel, les bases de données sont conçus par des gens qui ne connaissent pas les principes de normalisation, mais plutôt par les gars qui viennent d'être dans l'entreprise depuis 20 ans et connaissez "l'entreprise". Ce n'est que juste qui commence à travailler avec des mises en page de base de données merdiques maintenant, donc il a une expérience du monde réel! – corsiKa

+0

@glowcoder Ouais, je suis malheureusement très au courant de ça. Nous sommes en train de procéder à un refactoring de deux mois car une personne [rage contenue] [/ contained rage] a décidé de dupliquer les enregistrements de base de données pour les dates de début au lieu d'utiliser deux champs dans un seul enregistrement. – mdrg

+0

avec cette logique correcte, devrais-je aussi avoir une table de recherche pour la fabrication de modéliser ainsi? ou devrait-il être laissé tel quel? Comme c'est plus de 1 à plusieurs relation? par exemple. Samsung produit, Instinct, Epic etc ... –

0

Ce que je voudrais faire est de créer une table de pontage appelé phone_color avec une colonne pour le téléphone et une autre pour la couleur. Ces colonnes stockent les identifiants respectifs mappant la relation many-to-many.

Donc, étant donné les données ci-dessus vos lignes dans la table de pont serait

1,1 
2,2 
3,1 
4,3 

espoir qui aide.

Questions connexes