Quale sarebbe il miglior schema di database per l'articolo (categorie, tag) API [chiuso]

-1

Stiamo progettando di creare API REST che abbia oggetti principali come Utente e Articolo. L'oggetto dell'articolo ha i seguenti campi

  • Titolo - una riga
  • Descrizione: può espandersi fino a pochi paragrafi
  • Immagine - una o più immagini sull'articolo
  • Elenco di categorie - categorie di articoli (a partire da uno, ma in futuro possono essere più)
  • Elenco di tag - tag relativi all'articolo
  • Stato: stato dell'articolo in sospeso, revisionato, approvato ecc.

Techlogies / Frameworks che utilizziamo:

  • Java
  • Primavera
  • SpringBoot
  • MySQL
  • API REST con tipo di carico utile JSON per la risposta alla richiesta

Abbiamo discusso di alcuni piani ma volevamo sapere quale sarebbe stato il miglior schema di database per archiviare articoli nel database MySQL.

  1. Una tabella per articolo, categoria, tag e quindi anoter due tabelle per la relazione molti-a-molti tra articolo-categoria e tag-articolo
  2. Una tabella per articolo e categoria (presupponendo che ogni articolo abbia una categoria) e memorizza ID_categoria nella tabella articoli e memorizza i tag come valori con virgola nella tabella dell'articolo In qualsiasi altro modo, possiamo archiviare questi dettagli nel database in modo efficiente?

Un altro dubbio che abbiamo è come memorizzare le immagini. Massimo può essere fino a 3-4 immagini per articolo.

  1. Creiamo un'altra tabella per immagini e memorizziamo come CLOB / BLOB e poi in un'altra tabella memorizziamo la relazione tra articolo e immagine?

  2. O invece di CLOB / BLOB, lo memorizziamo come stringa codificata base64 nel database e decifriamo sul lato client?

  3. O carichiamo l'immagine reale su una soluzione di file hosting (ad esempio AWS S3 ..?) e quindi archiviamo l'URL dell'immagine nella tabella?

Quale dei precedenti sarà una soluzione efficiente per la memorizzazione e la reterivisione di immagini.

    
posta Kuldeep Singh 07.03.2018 - 15:09
fonte

2 risposte

3

We discussed few plans but wanted to know what would be the best database schema to store Articles in MySQL Database.

  1. One table each for article, category, tag and then anoter two tables for many-to-many relation between article-category and article-tag

  2. One table each for article and category(assuming each article will have one category) and store category_id in article table and store tags as comma-sperated values in article table only Any other way we can store these details in database efficiently?

Come hai detto, le categorie potrebbero diventare una relazione molti-a-molti, l'utilizzo di 2. non ti aiuterà a farlo. Inoltre, come ha detto @Carra:

'tags are comma-sperated values in article table '. That's usually a bad idea. Especially if you have to find all articles linked to a tag.

1 sembra essere l'opzione migliore che tu possa avere: easaly scalabile e robusta.

Another doubt we have is how to store images. Maximum it can be upto 3-4 images per article.

  1. Shall we create another table for images and store as CLOB/BLOB and then in another table store the relation between article and image ?

  2. Or instead of CLOB/BLOB, we store it as base64 encrypted string in database and decrypt on client side ?

  3. Or we upload the actual image to some file hosting solution (e.g. AWS S3..?) and then store the image URL in table ?

Non è una scelta facile. Tra l'1 e il 2, sceglierò perché l'immagine di base64 pesa il 20% in più rispetto a un BLOB. A meno che non sia possibile utilizzare BLOB per motivi tecnici ( esempio ).

La scelta di 3. dipende da molte cose: numero di immagini che vuoi memorizzare, dimensioni di ciascuna immagine, quanti accessi puoi avere al minuto, vuoi controllarlo o vuoi da una fonte esterna ... E così via.

    
risposta data 07.03.2018 - 15:44
fonte
1
  1. Articolo / categoria / tag.

Verifica se il tuo articolo / categoria è una relazione uno a uno o molti a molti. Puoi sempre iniziare da uno a uno e passare a una relazione molte a molte in seguito.

Tag. Salvarli come valori separati da virgola darà problemi se si desidera effettuare una ricerca su di essi. Dovrai eseguire una scansione parziale del testo su tutti i tuoi articoli per trovare l'elemento corretto. Se li memorizzi separatamente, puoi inserire un indice e avere query di selezione più rapide.

  1. Immagini

Possono essere piuttosto grandi e quindi caricare un po 'di più sul tuo db. Pertanto potrebbe essere una buona idea salvare le immagini da soli in un db separato o su disco e aggiungere un collegamento a loro dal db principale. Vedi questi domande per informazioni più dettagliate.

    
risposta data 07.03.2018 - 15:43
fonte

Leggi altre domande sui tag