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.
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
erreur: il donne que les sous-requêtes ne sont pas autorisés dans ce contexte seulement scalarexpressions sont autorisés – Abid