web-dev-qa-db-fra.com

Superypes et sous-types

J'essaie de concevoir une base de données de super-types/sous-types. J'ai les utilisateurs suivants:
- utilisateur de base
[.____] - utilisateur d'entreprise
- Administrateur (Super utilisateur).

Les trois utilisateurs partagent une table commune (utilisateurs) où des champs tels que le nom, le courrier électronique, le mot de passe, etc. sont stockés. Toutefois, les utilisateurs d'entreprises ont une table séparée (entreprise) où les domaines de l'entreprise comme Business_Name, Business_License, Business_email, etc. sont stockés. Mon problème est que mes utilisateurs d'entreprises sont eux-mêmes divisés en 5 catégories ou plus.
[.____] Mes utilisateurs d'entreprises sont scindés comme ceci:

  1. peintres
  2. détaillant de véhicules
  3. accompagnateur
  4. techniciens de service:
    1. techniciens du moteur
    2. techniciens de transmission
    3. techniciens informatiques
    4. techniciens électriques
  5. représentants des ventes
    1. localisation physique Représentant des ventes
    2. représentant des ventes Internet
    3. directeur commercial

J'ai actuellement conçu cette base de données mais je ne suis pas vraiment satisfaite. Est-ce qu'il y a une meilleure approche?

enter image description here

Modifier 1 Je dois mentionner que les types d'entreprise et le sous-type n'ont pas de champs différents. La table des affaires tient tout ce dont j'ai besoin. Les types d'entreprise et le sous-type ressemblent davantage à une énumération, mais détenus dans une table.

Edit 2
Exemple de sélection que j'aurai besoin. Plus précisément, comment un résultat devrait ressembler à:

username       | user_type   | business_name    | business_type      | business_subtype  

John Doe       | business    | AUDI Dealership  | service technician | engine mechanic  
Mary Liu       | basic user  | NULL             | NULL               | NULL
George Vangh   | super user  | NULL             | NULL               | NULL
Martha Ayla    | business    | AUDI Dealership  | sales              | sales representative  
Carlos M       | business    | Ford & Lincoln   | sales              | sales manager

Mise à jour 3
[.____] a trouvé cet exemple en ligne et je pensais que je vais essayer d'essayer. Est-ce acceptable?

enter image description here

3
Cristian

Oui, le code de la mise à jour 3 fonctionnera et vous pourrez sélectionner les informations dont vous avez besoin. Si vous êtes à l'aise avec cela, allez-y. N'oubliez pas que cela signifie que vous devrez dupliquer votre type Painter Tapez à la fois le SUB et Super Type, ou laissez Painter comme sous-type sans type. Quoi qu'il en soit, c'est un peu maladroit mais fonctionnel.

En supposant que les tables soient aussi petites que vous le dites, ainsi que vos besoins aussi simples qu'ils semblent que vous souhaitiez envisager de comprimer les données commerciales dans une table. Cela ne semblera pas aussi sexy que d'autres solutions, mais les opérations de crud seront mortes simples. Je ne connais pas très bien mysql alors veuillez excuser toutes les erreurs de syntaxe stupides:

CREATE TABLE users (user_id INT NOT NULL, user_type_id INT NOT NULL, busniess_id INT, etc);
CREATE TABLE user_type (user_type_id INT NOT NULL, name VARCHAR(50) );
CREATE TABLE business (business_id INT NOT NULL, business_name VARCHAR(50) NOT NULL, business_type_id INT NOT NULL, business_subtype_id INT, etc);
CREATE TABLE business_type (business_type_id INT NOT NULL, name VARCHAR(50) );
CREATE TABLE business_sub_type (business_sub_type_id INT NOT NULL, name VARCHAR(50) );

Comme je l'ai dit que ce n'est pas sexy, mais cela aura le travail. C'est une bummer que MySQL n'offre pas vérifiez les contraintes car ils pourraient offrir une touche de protection.

Si vos exigences deviennent plus impliquées, je reconsidérirais sérieusement @ MDCCL's Post . Mon gut dit que c'est la meilleure solution des solutions les plus ho-bourds que je puisse envisager. Pour citer une autre réponse à cette question:

La réponse de MDCCL est fascinante, éducative et correcte (bien qu'au-dessus de ma qualité de paiement).

1
Erik