2010-03-06 10 views
1

j'ai créé un nom db movielibrarysystem dans lequel j'ai 3 tables ..comment insérer des données en utilisant plusieurs tables

qui sont le type, l'éditeur et le film ... maintenant 1 éditeur pourrait avoir beaucoup de films et 1 film est de beaucoup de type .. dans la table de film, l'id de l'éditeur ainsi que le typeid agissent comme des clés étrangères ..

ma question est que comment insérer une donnée dans une table de film ... j'ai déjà inséré des données dans l'éditeur et le type de tables, mais je ne suis pas en mesure d'insérer dans la table de film ..

Répondre

2

Voici ce que vous faites. Premièrement, la relation entre l'éditeur et le film est un à plusieurs - un éditeur peut publier de nombreux films, mais chaque film n'a qu'un seul éditeur. Cependant, type to movie est une relation plusieurs-à-plusieurs (vous indiquez qu'un film est de plusieurs types, mais c'est aussi le cas d'un type de plusieurs films), vous devriez donc avoir une table supplémentaire pour cette relation.

essentiellement:

publisher: 
    publisher_id 
    publisher_name 
    <other publisher info> 
type: 
    type_id 
    type_name 
    <other type info> 
movie: 
    movie_id 
    movie_name 
    publisher_id references publisher(publisher_id) 
    <other movie info> 
movie_type: 
    movie_id references movie(movie_id) 
    type_id references type(type_id) 

avec des clés primaires appropriés pour tous ceux.

Ensuite, en supposant que vous avez l'éditeur et le type inséré, vous pouvez insérer le film ainsi:

begin transaction; 
insert into movie (movie_name,publisher_id) values (
    'Avatar', 
    (select publisher_id from publisher where publisher_name = 'Spielberg') 
); 
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'), 
    (select type_id from type where type_name = 'SciFi') 
); 
insert into movie_type (movie_id,type_id) values (
    (select movie_id from movie where movie_name = 'Avatar'), 
    (select type_id from type where type_name = 'GrownUpSmurfs') 
); 
commit; 

En d'autres termes, vous utilisez des sous-sélections pour obtenir les identifiants des tableaux correspondants basés sur une unique, ensemble de propriétés (l'exemple ci-dessus suppose que les noms de films sont uniques, en réalité vous aurez besoin d'une requête plus spécifique, comme pour gérer les différents films portant le même nom: The Omega Man, par exemple). Si vous n'utilisez pas un SGBD prenant en charge les sélections dans les sections de valeur, le mieux est probablement de ne retenir ou d'extraire les valeurs pertinentes d'une variable dans le langage de programmation que vous utilisez et de construire une requête à faire il. En pseudo-code:

begin transaction; 
insert into movie (movie_name,publisher_id) values (
    'Avatar', 
    (select publisher_id from publisher where publisher_name = 'Spielberg') 
); 
select movie_id into :m_id from movie where movie_name = 'Avatar'; 
select type_id into :t_id1 from type where type_name = 'SciFi'; 
select type_id into :t_id2 from type where type_name = 'GrownUpSmurfs'; 
insert into movie_type (movie_id,type_id) values (:m_id, :t_id1); 
insert into movie_type (movie_id,type_id) values (:m_id, :t_id2); 
commit; 

En réponse à votre commentaire:

hey, je ne l'ai pas eu au point que du type et de relation de film .. vous s'il vous plaît préciser ce point .. Abid

Avatar et Solaris peuvent être considérés du type SciFi. Tellement de films à un genre. Et Xmen: Wolverine peut être considéré à la fois comme une action et un comique-remake. Tellement de types à un film.

Les relations plusieurs-à-plusieurs sont mieux représentées avec une table distincte contenant les correspondances croisées entre les deux tables liées.

+0

hey, je n'ai pas eu le point que de type et de relation film .. vous s'il vous plaît élaborer ce point .. Abid Abid – Abid

+0

erreur: il donne que les sous-requêtes ne sont pas autorisés dans ce contexte seulement scalarexpressions sont autorisés – Abid

0

Si vous contraindre des tables de type et éditeur pour utiliser des clés étrangères vous devra d'abord insérer les deux identifiants dans votre table de films. Si possible, je laisserais la table des films être celle qui incrémente les clés étrangères.

+0

je l'ai déjà fait .. je veux seulement insérer les données dans les films que je ne reçois pas – Abid

Questions connexes