Ho eventi e foto e quindi commenti per entrambi. Al momento, ho due tabelle di commenti, una per i commenti relativi agli eventi e l'altra per i commenti alle foto. Schema è simile a questo:Quando due tabelle sono molto simili, quando dovrebbero essere combinate?
CREATE TABLE EventComments
(
CommentId int,
EventId int,
Comment NVarChar(250),
DateSubmitted datetime
)
CREATE TABLE PhotoComments
(
CommentId int,
PhotoId int,
Comment NVarChar(250),
DateSubmitted datetime
)
Le mie domande è se io li combinano, e aggiungere una tabella di riferimento trasversale a parte, ma non riesco a pensare ad un modo per farlo correttamente. Penso che questo dovrebbe essere OK, quali sono i tuoi pensieri?
Modifica
in base alla risposta di Walter (e qualche lettura leggera), mi è venuta in mente questo:
CREATE TABLE Comments
(
CommentId int,
Comment NVarChar(250),
DateSubmitted datetime
CONTRAINT [PK_Comments] PRIMARY KEY
(
CommentId
)
)
CREATE TABLE EventComments
(
CommentId int,
EventId int
)
CREAT TABLE PhotoComments
(
CommentId int,
PhotoId int
)
ALTER TABLE EventComments ADD CONSTRAINT FK_EventComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
ALTER TABLE PhotoComments ADD CONSTRAINT FK_PhotoComments FOREIGN KEY (CommentId) REFERENCES Comments(CommentId)
ci sono davvero differenze di prestazioni tra le strutture? Per me, sembra un po 'una preferenza. Vedo i vantaggi nel secondo schema, se voglio aggiungere una certa specificità ai commenti degli eventi o ai commenti delle foto, ho una tabella separata per farlo, e se voglio entrambi condividere una nuova proprietà, c'è una sola tabella per aggiungi la nuova proprietà.
Il miglior commento di puro design sulla pagina, IMHO. – Rap
Ho fatto delle ricerche e ho aggiornato la domanda.Grazie per l'input – scottm
Non sono assolutamente d'accordo con questa risposta; in pratica, stai elemosinando dati inconsistenti e disordinati. Come vengono cancellati i commenti? Lo vedo spesso impostato come lo ha implementato ScottM nella domanda rivista, e quasi sempre il commento rimane nei commenti, ma il record correlato in EventComments o in PhotoComments viene eliminato, e nei commenti viene lasciato un record penzolante. – JasonFruit