Domanda

Sto creando una semplice app per blog e finora ho 3 tabelle, post, commenti e autori.

Elencherò solo la chiave primaria per ogni tabella e una chiave esterna.

I post conterranno postid come chiave primaria.

I commenti conterranno commentid come chiave primaria e postid come chiave esterna.

I post hanno una relazione da 0 a molti con i commenti.

Gli autori conterranno un autore come chiave primaria.

Gli autori avranno molte o molte relazioni con i post e molte o molte relazioni con i commenti.

L'ultima affermazione è dove sto avendo più problemi. Gli autori hanno effettivamente molte o molte relazioni con post e commenti dal momento che è uno a uno. Se sono molti o molti, ho sentito che è una buona idea avere una tabella intermedia che descriva la relazione tra post-autori e commenti-autori, ma non sono sicuro di quali chiavi userei in questa tabella?

Se lo esprimo verbalmente come un autore può scrivere molti post e molti post possono essere scritti da un autore, lo vedo come uno a molti, ma se lo visualizzo dai dati effettivi memorizzati nelle tabelle come i post conterrà più post e gli autori conterranno più autori, quindi sembra che molti a molti, quindi è questo lo scopo della tabella dei riferimenti incrociati, per rimuovere i duplicati.

È stato utile?

Soluzione

Penso che gli autori di post / commenti sarebbero una relazione da 1 a molti, a meno che tu non preveda di supportare una situazione in cui un post potrebbe avere più autori. Forse ha senso, ma sembra improbabile che molte persone lo usino. Non mi preoccuperei di complicare il mio schema per una funzionalità che forse lo 0,1% dei miei utenti vorrebbe.

Metti l'autore nella tabella Messaggi e commenti e dovresti essere pronto.

Altri suggerimenti

A meno che tu non stia organizzando un tipo particolare di forum, sicuramente le regole sono

  • un autore può scrivere molti post
  • un post deve avere uno e solo uno Autore
  • un autore può scrivere molti commenti
  • un commento deve avere uno e solo uno Autore

No, è solo uno-a-molti. Un post o un commento può avere un solo autore - giusto?

Quindi avresti solo bisogno di una chiave esterna AuthorID nelle tabelle dei post e dei commenti

Se lo esprimo verbalmente come un autore può scrivere molti post e molti post possono essere scritti da un autore, lo vedo come uno a molti, ma se lo visualizzo dai dati effettivi memorizzati nelle tabelle come i post conterrà più post e gli autori conterranno più autori, quindi sembra che molti a molti, quindi è questo lo scopo della tabella dei riferimenti incrociati, per rimuovere i duplicati.

Vedo dove ti stai confondendo. " La tabella dei post conterrà più post " e "la tabella degli autori conterrà più autori" è vero, ma non è la relazione che stai cercando di esprimere. (Questa è solo la natura delle tabelle: una tabella degli autori avrà molte righe, ognuna delle quali rappresenta un singolo autore.)

La cosa cruciale è, per un determinato post , quanti autori avrà? Uno o molti? Per un determinato autore, quanti post avrà? Uno o molti?

La tabella dei riferimenti incrociati in mezzo sarebbe simile a questa:

create table PostsToAuthors (
    postToAuthorsId int primary key,
    postId int,
    autorId int
);

Ogni associazione tra un autore e un post richiederebbe la creazione di un record in questa tabella. Nota che questa tabella non include i vincoli (chiave esterna e unico specifici) che vorresti su una tabella come questa.

Vorrei aggiungere un'altra colonna alle tabelle Post e commenti per memorizzare la chiave esterna dell'autore. Di solito, post e commenti hanno un solo autore.

Quindi il tuo schema sarebbe simile a questo:

Posts
    postid - primary key
    authorid - foreign key
Comments
    commentid - priamry key
    postid - foreign key
    authorid - foreign key
Authors
    authorid - primary key

Authors-comments - one(zero) to many relationship
Authors-posts - one(zero) to many relationship
Posts-comments - one(zero) to many relationship
  

Gli autori ne avranno molti a molti   relazione con i messaggi e molti a   molte relazioni con i commenti.

Quindi stai dicendo che ogni autore ha molti post e ogni post ha molti autori? E lo stesso per i commenti?

Se stai creando un wiki, OK, ma nella maggior parte dei casi, un determinato post o commento avrebbe un solo autore. È quello che intendevi?

In ogni caso, supponiamo che esista una relazione molti-a-molti. Dovresti creare una tabella relazionale, ad esempio, chiamata autori_positori , e avrebbe le seguenti colonne: id , author_id , post_id . Ogni riga indica che " autore X e post Y sono correlati. & Quot;

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top