2010-04-22 7 views
0

J'ai un peu de travail devant moi. (Base de données DB2) J'ai besoin de créer une table qui sera une table enfant (est ce que ça s'appelle en SQL?) J'ai besoin de ça pour qu'elle ait une contrainte de clé étrangère avec mon autre table, donc quand la table parent est modifié (enregistrement supprimé) la table enfant perd également cet enregistrement.La table enfant DB2 ne fonctionne pas - Créer une table

Une fois que j'ai la table, j'ai aussi besoin de la remplir avec les données de l'autre table (s'il y a un moyen facile de UPDATE cela).

Si vous pouviez me diriger dans la bonne direction, cela aiderait beaucoup, car je ne sais même pas quelle syntaxe rechercher.

Le tableau que j'ai en place:

create table titleauthors (
    au_id  char(11), 
    title_id char(6), 
    au_ord  integer, 
    royaltyshare decimal(5,2)); 

Le tableau que je crée:

create table titles (
    title_id char(6), 
    title  varchar(80), 
    type  varchar(12), 
    pub_id  char(4), 
    price  decimal(9,2), 
    advance  decimal(9,2), 
    ytd_sales integer, 
    contract integer, 
    notes  varchar(200), 
    pubdate  date); 

J'ai besoin title_id d'être jumelés à la title_id de la table parent et utiliser ON SUPPRIMER Syntaxe CASCADE à supprimer lorsque cette table est supprimée.

Ma tentative:

CREATE TABLE BookTitles (
title_id char(6) NOT NULL CONSTRAINT BookTitles_title_id_pk REFERENCES titleauthors(title_id) ON DELETE CASCADE, 
title  varchar(80) NOT NULL, 
type  varchar(12), 
pub_id  char(4), 
price  decimal(9,2), 
advance  decimal(9,2), 
ytd_sales integer, 
contract integer, 
notes  varchar(200), 
pubdate  date) 
; 

Répondre

1

Quelques commentaires, d'abord:

  1. Une table parent doit avoir une clé primaire ou unique afin qu'il soit référencé par une clé étrangère.

  2. Votre message implique que vous voulez que BookTitles soit la table enfant (même si cela me semble inversé). Logiquement, je pense que vous voulez que la logique soit: "Si vous supprimez un livre de la table BookTitles, alors les lignes de la table TitleAuthors devraient aussi être supprimées" - et non l'inverse. De votre description de la table TitleAuthors, la clé primaire logique est (TITLE_ID, AU_ID). Cela l'empêcherait d'être une table parent à BookTitles, qui ne contient pas AU_ID.

  3. Il est beaucoup plus facile d'ajouter des contraintes après la création d'une table que d'essayer de le spécifier dans la table CREATE TABLE STATEMENT.


En supposant que vous voulez que votre relation parent/enfant interverti (BookTitles comme parent, titleauthors comme enfant):

CREATE TABLE BookTitles (
    title_id char(6) NOT NULL, 
    title  varchar(80) NOT NULL, 
    type  varchar(12), 
    pub_id  char(4), 
    price  decimal(9,2), 
    advance  decimal(9,2), 
    ytd_sales integer, 
    contract integer, 
    notes  varchar(200), 
    pubdate  date 
); 

alter table booktitles 
    add primary key (title_id); 

alter table titleauthors 
    add constraint fk_booktitles 
    foreign key (title_id) 
    references booktitles (title_id) 
    on delete cascade; 

Cela entraînera des enregistrements dans titleauthors à supprimer si le titre est supprimé de BookTitles.