Ceci est sûr possible, mais il implique une certaine planification lors de la création de votre modèle de données.
Comme nous l'avons déjà mentionné, il existe différentes manières d'implémenter des relations de type super-type (Héritage).
1.) Dans un tableau
Dans ce cas, je modélise votre problème un peu comme ceci:
Garage(GarageId_PK, Name)
Vehicle(VehicleId_PK, LicenceNr, GarageId_FK, SomethingOnlyCarsHave, SoemthingOnlyMortorbikesHave, Type)
Pour le type que vous pouvez donner cartes d'identité et avoir une table séparée où vous reliez les identifiants aux noms ou écrivez simplement les noms là (pas une solution très propre!). Btw .: Si vous voulez avoir plusieurs héritages (dont je suppose que vous n'avez pas besoin pour les véhicules), vous pouvez également faire un masque de type.
Personnellement, je n'aime pas vraiment cette approche, mais il est tout à fait correct de le faire. Oracle, par exemple, le suggère dans son matériel d'étude. En outre, il est la solution plus simple pour votre un problème de requête:
SELECT *
FROM Vehicle v
INNER JOIN Type t ON (v.Type = t.TypeId)
WHERE GarageId = 42
2.) Tableau pour chaque Sous-type
Pour moi, cela se sent comme la solution plus propre, parce que vous avez des valeurs moins NULL, mais vous besoin d'un peu plus de travail pour tout obtenir en une seule requête.Cela permet théoriquement l'héritage multiple et vous devriez écrire un déclencheur permettant uniquement le sous-type.
SQL dans ce cas:
SELECT *
FROM Vehicles v
LEFT JOIN Car c ON(v.VehicleId = c.VehicleId)
LEFT JOIN Motorbike m ON (v.VehicleId = m.VehicleId)
WHERE GarageId = 42
Ou si vous avez plusieurs types vous pouvez mettre les choses laides dans une vue:
CREATE OR REPLACE View v_allVehicles AS
(SELECT *
FROM Vehicles v
LEFT JOIN Car c ON(v.VehicleId = c.VehicleId)
LEFT JOIN Motorbike m ON (v.VehicleId = m.VehicleId)
SELECT *
FROM v_allVehicles
EDIT:
Un mot sur notation: Quand je mets _PK derrière un nom, il se réfère à la colonne étant une clé primaire. _FK à une clé étrangère.
Je pense que ceci est plus adapté à un tutoriel de base de données relationnelle qu'à un format Q et A de débordement de pile. Essayez [celui-ci] (http://www3.ntu.edu.sg/home/ehchua/programming/sql/Relational_Database_Design.html) et voyez comment vous allez. –
Aucune des options que vous avez suggérées n'est la bonne façon de procéder. Si je peux penser à un bon moyen de le faire, je répondrai à la question, à moins que quelqu'un d'autre ne le fasse en premier. –
Thx Garry -.- ... – user1713862