web-dev-qa-db-fra.com

Quels principes dois-je suivre lors de la saisie de données dans une base de données relationnelle complexe?

Je suis nouveau dans les bases de données, alors pardonnez-moi s'il s'agit d'une question fondamentale.

J'essaie d'analyser un dictionnaire open source complexe et de sortir les données dans une base de données Access, qui est tout aussi complexe:

enter image description here

Je comprends comment insérer des données dans une table, mais ce que je ne comprends pas, c'est comment on doit insérer des données dans plusieurs tables qui dépendent les unes des autres pour les clés étrangères. Pour donner un exemple simplifié:

J'ai trois tables: Entry, Keyword et Keyword_Priority. Chaque entrée peut avoir plusieurs mots clés, donc la table Keyword renvoie vers Entry via une clé étrangère. Et chaque élément de mot-clé peut avoir plusieurs éléments décrivant la priorité du mot-clé, donc le Keyword_Priority la table renvoie à Keyword via une clé étrangère, comme ci-dessous:

enter image description here

Dans ce scénario simplifié, supposons que je souhaite créer une nouvelle entrée à l'aide de SQL. Où est-ce que je commence? Est ce que je:

  1. Insérez d'abord dans la table Entry pour créer une nouvelle EntryID

  2. Insérez ensuite dans la table Keyword en utilisant la nouvelle EntryID comme clé étrangère

  3. Insérez ensuite dans le Keyword_Priority table utilisant le champ ID du mot clé comme clé étrangère

Ou bien, dois-je faire l'inverse ...

  1. Insérez dans le Keyword_Priority table

  2. Insérer dans la table Keyword

  3. Insérer dans la table Entry

Donc, pour résumer, ma question est:

Où dois-je commencer lors de l'insertion de données dans plusieurs tables à la fois? De haut en bas ou de bas en haut?

4
Lou

Une clé étrangère se rapporte à la clé primaire d'une autre table. Lorsque l'enregistrement avec l'étranger est entré, l'enregistrement correspondant avec cette clé primaire doit être présent. Par conséquent, vous devez toujours commencer par insérer dans les tables du côté 1 de la relation (la table principale ou parent ou clé primaire). Ensuite, vous seul pouvez saisir un enregistrement du côté n de la relation (dans le détail ou dans la table des clés enfant ou étrangère).

Ordre: 1. Entrée, 2. Mot-clé, 3. Keyword_Priority.

Si une table a plusieurs clés étrangères, les enregistrements associés dans toutes les autres tables avec les clés primaires correspondantes doivent être saisis en premier. Par exemple, avant de saisir un enregistrement dans SenseRestricted..., les enregistrements correspondants dans Sense et dans Reading doivent avoir été insérés.

Quelques conseils généraux. Dans l'image, je suppose que Keyword_Priority dépend de Keyword qui dépend de Entry. Vous devez donc commencer par Entrée, puis Mot-clé, etc.

Du point de vue de la modélisation, quelque chose est quelque chose, peu importe où dans le modèle vous l'utilisez. L'entrée semble assez décente:

CREATE TABLE entry
( EntryId ... NOT NULL PRIMARY KEY
, ...
);

Pour le mot clé, quelque chose comme:

CREATE TABLE keyword
( KeywordId ... NOT NULL PRIMARY KEY
, ...
, EntryId ... REFERENCES entry (EntryId)
)

C'est à dire. n'utilisez pas Id, c'est trop vague. L'attribut est un identifiant de quelque chose en particulier. Notez également comment l'attribut EntryId est nommé de la même manière que dans l'entrée.

Je ne m'attarderai pas sur la question des clés de substitution car je pense qu'il y a des limitations dans ms-access (du moins c'était le cas auparavant), qui empêchent les clés étrangères composites.

5
Lennart