Si usted quiere saber si puede tener múltiples claves externas a una sola columna, entonces la respuesta es no, no puedes.
Puede tener claves externas separadas si lo desea. Por lo que su puede modificar su mesa comentario como este -
comment:
* comment_id (PK)
* PostID (FK to Post.PostID)
* PhotoID (FK to <Photo>.PhotoID)
* ProfileID (FK to <Profile>.ProfileID)
* Body
Y, usted tendrá que asegurarse de que usted permita valores nulos en columnas PostID, PhotoID y profileId en la tabla comentario y quizá también establece el valor predeterminado en nulo.
Aquí es el DDL para lograr esto -
Create table Photo
(
PhotoID int,
PhotoDesc varchar(10),
Primary key (PhotoID)
)
Create table Post
(
PostID int,
PostDesc varchar(10),
Primary key (PostID)
)
Create table Profiles
(
ProfileId int,
ProfileDesc varchar(10),
Primary key (ProfileId)
)
Create table Comment
(
CommentID int,
PhotoID int,
PostID int,
ProfileId int,
body varchar(10),
Primary key (CommentID),
Foreign key (PhotoID) references Photo(PhotoID),
Foreign key (PostID) references Post(PostID),
Foreign key (ProfileId) references Profiles(ProfileId)
)
insert into Photo values (1,'Photo1')
insert into Photo values (2,'Photo2')
insert into Photo values (3,'Photo3')
insert into Post values (11,'Post1')
insert into Post values (12,'Post2')
insert into Post values (13,'Post3')
insert into Profiles values (111,'Profiles1')
insert into Profiles values (112,'Profiles2')
insert into Profiles values (113,'Profiles3')
insert into Comment (CommentID,PhotoID,body) values (21,1,'comment1')
insert into Comment (CommentID,PhotoID,body) values (22,3,'comment2')
insert into Comment (CommentID,PostID,body) values (23,11,'comment3')
insert into Comment (CommentID,PostID,body) values (24,12,'comment4')
insert into Comment (CommentID,ProfileId,body) values (25,112,'comment5')
insert into Comment (CommentID,ProfileId,body) values (26,113,'comment6')
-- to select comments seperately for Photos, profiles and posts
select * from Comment where PhotoID is not null
select * from Comment where ProfileId is not null
select * from Comment where PostID is not null
No, la posibilidad de tener comentarios en varias entidades no es un problema. Entonces, ¿necesito N tablas para N entidades? ¿Funcionarán las reglas de CASCADE en este caso? – galymzhan
Eso es todo, N tablas es la idea de este diseño. Si el DMBS los admite, las reglas de cascada deberían funcionar. –
Gracias por las explicaciones. Probablemente elegiré tu enfoque. ¿Qué quiso decir con mejorar el diseño? – galymzhan