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:
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?
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?
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).