2013-01-04 3 views
2

Quelqu'un peut-il proposer une conception de base de données pour les éléments suivants:Database Design - Catalogue - Gamme - Produit

Un utilisateur peut faire un catalogue Dans un catalogue un utilisateur peut faire une gamme - à savoir une gamme de produits Dans un éventail dans lequel un utilisateur peut ajouter plusieurs produits Dans une plage, un utilisateur peut ajouter plusieurs plages -> plage-> plage-> plage avec des produits.

J'ai actuellement dans ma base de données -

catalogue_range avec - id, nom, description et catalogue_product avec - id, range_id, nom, description

peut-on voir ce que je suis en train de produire ?

Mon but est de pouvoir créer plusieurs plages de catalogue dans une plage de catalogue et d'ajouter plusieurs produits à chacune de ces plages de catalogue.

Voici mon SQL actuelle:

`catalogue_range` (
     `id` char(40) NOT NULL, 
     `profile_id` char(40) NOT NULL, 
     `type` enum('pdf','db') DEFAULT NULL, 
     `status` enum('new','draft','live') NOT NULL, 
     `name` varchar(64) NOT NULL, 
     `description` varchar(1000) NOT NULL, 
     `updated` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
     PRIMARY KEY (`id`), 
     KEY `profile_id` (`profile_id`) 
    ) 

`catalogue_product` (
    `id` char(40) NOT NULL, 
    `catalogue_id` char(40) NOT NULL, 
    `order` smallint(5) unsigned NOT NULL, 
    `name` varchar(50) NOT NULL, 
    `description` varchar(250) NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `catalogue_id` (`catalogue_id`) 
) 

Merci à l'avance.

+1

S'il vous plaît poster le sql pour le meilleur design que vous avez jusqu'à présent. (Indente quatre espaces de sorte qu'il soit correctement formaté.) – poolie

+0

mise à jour de SQL comme demandé, voir l'article original – cwiggo

+0

Et voulez-vous que les produits puissent être présents dans plusieurs catalogues? – poolie

Répondre

1
    catalogue
  1. (id catalogue, vos attributs privés)
  2. produit (id produit, id #catalogue, vos attributs privés)
  3. gamme (gamme id, parent id #range, vos attributs privés)
  4. gamme de produits (#product id, #range id)

Vous aurez besoin des procédures stockées/algorithmes applicatifs pour compiler:

  • la liste des produits d'une gamme (pour calculer sqls récursives MySQL ne propose pas de fonctions analytiques comme oracle ne)
  • la liste de plages d'un catalogue/plage

Espérons que cela aide. S.

+0

merci pour les solutions, j'ai utilisé une façon très similaire à ce que vous avez dit, la seule façon que je l'ai fait différemment est de fusionner les catalogues et les gammes, car effectivement, ils sont les mêmes dans mon utilisation. Merci C! – cwiggo

1

En supposant qu'un produit ne peut exister que dans un catalogue à la fois, votre conception est presque correcte comme elle est. Ce qui vous manque est une clé étrangère récursive sur catalogue_range. Ajouter quelque chose comme ce qui suit à votre définition de la table catalogue_range:

`parent_range_id` char(40) NULL, 
FOREIGN KEY (`parent_range_id`) REFERENCES catalogue_range(`id`) 

La gamme de haut niveau (s) pour un utilisateur donné aura une valeur NULL parent_range_id, d'autres se référeront à la plage contenant. Notez que les hiérarchies ne sont pas nécessairement faciles à utiliser dans SQL. Vous pouvez également vous intéresser aux techniques permettant de rendre les données hiérarchiques plus compatibles avec SQL, telles que nested sets.