Spécification des métadonnées
La première longue section décrit en détail comment les métadonnées décrivant la base de données et le modèle SDO requis est fourni à DAS Relationnel.
Lorsque le constructeur de DAS Relationnel est appelé, il doit recevoir plusieurs informations. La majeure partie des informations, passée en tant qu'un tableau associatif dans le premier argument du constructeur, dit à DAS Relationnel ce qu'il doit savoir à propos de la base de données relationnelle. Il décrit les noms des tables, des colonnes, des clés primaires et des clés secondaires. On devrait comprendre assez facilement ce qui est requis et une fois écrit, il peut être placé dans un fichier PHP et inclut lorsque nécessaire. Le reste des informations, passé dans un deuxième et troisième arguments du constructeur, dit au DAS Relationnel ce qu'il doit savoir à propos des relations entre les objets et la forme du graphique de données; il détermine finalement comment les données de la base de données seront normalisées dans le graphique.
Métadonnées de base de données
Le premier argument du constructeur décrit la base de données relationnelle cible.
Chaque table est décrite par un tableau associatif avec jusqu'à quatre clés.
Clé | Valeur |
---|---|
name | Le nom de la table. |
columns | Un tableau listant les noms des colonnes, dans n'importe quel ordre. |
PK | Le nom de la colonne contenant la clé primaire. |
FK | Un tableau avec deux entrées, "from" et "to" (provenance et destination), qui définissent une colonne contenant la clé étrangère et une table dans lequel la clé étrangère pointe. S'il n'y a pas de clé étrangère dans la table, alors l'entrée "FK" est optionnelle. Seulement une clé étrangère peut être spécifiée. Seulement une clé étrangère pointant à une clé primaire d'une table peut être spécifiée. |
<?php /***************************************************************** * MÉTADONNÉES DÉFINISSANT LA BASE DE DONNÉES ******************************************************************/ $company_table = array ( 'name' => 'company', 'columns' => array('id', 'name', 'employee_of_the_month'), 'PK' => 'id', 'FK' => array ( 'from' => 'employee_of_the_month', 'to' => 'employee', ), ); $department_table = array ( 'name' => 'department', 'columns' => array('id', 'name', 'location', 'number', 'co_id'), 'PK' => 'id', 'FK' => array ( 'from' => 'co_id', 'to' => 'company', ) ); $employee_table = array ( 'name' => 'employee', 'columns' => array('id', 'name', 'SN', 'manager', 'dept_id'), 'PK' => 'id', 'FK' => array ( 'from' => 'dept_id', 'to' => 'department', ) ); $database_metadata = array($company_table, $department_table, $employee_table); ?>
Les métadonnées correspondent à une base de données relationnelle qui peut avoir été définie comme étant MySQL :
<?php $department_containment = array( 'parent' => 'company', 'child' => 'department'); $employee_containment = array( 'parent' => 'department', 'child' => 'employee'); $SDO_containment_metadata = array($department_containment, $employee_containment); ?>
Les clés étrangères dans les métadonnées de base de données sont interprétées comme des propriétés avec soit des relations de valeurs multiples contenues ou des références de simples valeurs non contenues, dépendamment si elles ont une relation SDO contenue correspondante spécifiée dans les métadonnées. Dans cet exemple ici, les clés étrangères du département à la compagnie (la colonne co_id dans la table de departement) et de l'employé au département (la colonne dept_id dans la table employe) sont interprétées comme supportant les relations SDO contenues. Chaque référence contenue mentionnée dans les métadonnées de relations contenue de SDO doit avoir une clé correspondante présente dans la base de données et définie dans les métadonnées de base de données. Les valeurs des colonnes de la clé étrangère pour les relations contenues n'apparaissent pas dans les objets de données; à la place, chacune d'entre elles est représentée par une relation contenue du parent à l'enfant. Alors la colonne co_id dans la ligne de département de la base de données, par exemple, n'apparaît pas en tant que propriété du type de département, mais apparaît à la place comme une relation contenue appelée departname sur le type de compagnie. Notez que la clé étrangère et la relation parent-enfant semble avoir un sens opposé : la clé étrangère pointe du département à la compagnie, mais la relation parent-enfant pointe de la compagnie au département.
La troisième clé dans cet exemple, le employe_du_mois, est gérée différemment. Elle n'est pas mentionnée dans les métadonnées de relations SDO contenues. Ceci a pour conséquence d'être interprété de la seconde manière : elle devient une référence de valeur simple non contenue sur l'objet compagnie, sur lequel vous pouvez assigner des références au type d'employé d'objets de données SDO. Elle apparaît comme une propriété du type de compagnie. Le moyen pour lui assigner une valeur dans le graphique de données est d'avoir un graphique qui contient un objet employé avec les relations contenues et d'assigner l'objet à celui-ci. Ceci est montré dans les exemples plus loin.