Articles of database design

Tracciamento delle notifiche di Facebook (DB Design)

Sto solo cercando di capire come il database di Facebook è strutturato per le notifiche di tracciamento. Non entrerò molto nella complessità come Facebook. Se immaginiamo una semplice struttura a tabelle per le notifiche: notifications (id, userid, update, time); Possiamo ottenere le notifiche degli amici usando: SELECT `userid`, `update`, `time` FROM `notifications` WHERE `userid` IN […]

Quali sono i vantaggi dell’utilizzo di un singolo database per EACH client?

In un’applicazione basata su database progettata per più client, ho sempre pensato che fosse “meglio” utilizzare un singolo database per TUTTI i client, associando i record con indici e chiavi appropriati. Ascoltando il podcast Stack Overflow, ho sentito Joel menzionare che FogBugz utilizza un database per client (quindi se ci fossero 1000 client, ci sarebbero […]

Come creare un database multi-tenant con strutture di tabelle condivise?

Il nostro software attualmente funziona su MySQL. I dati di tutti gli inquilini sono memorizzati nello stesso schema. Dato che stiamo usando Ruby on Rails, possiamo facilmente determinare quali dati appartengono a quale tenant. Tuttavia ci sono alcune aziende che temono che i loro dati potrebbero essere compromessi, quindi stiamo valutando altre soluzioni. Finora ho […]

Design del database di tipo Supertype-sottotipo

Ho una domanda sul supertipo di sottotipo in un database relazionale. Se avessi un supertipo con due sottotipi, avrei il PK del supertipo relativo al PK delle due sottotipi come FK. Diciamo che ho avuto qualcosa del genere: genere TypeID PK SuperTipo ID PK TypeID FK SubtypeA ID PK, FK SubtypeB ID PK, FK Sul […]

SERIAL personalizzato / autoincremento per gruppo di valori

Sto cercando di creare un sistema di blog di tipo e mi sono imbattuto in un piccolo problema. In poche parole, ci sono 3 colonne nella mia tabella degli article : id SERIAL, category VARCHAR FK, category_id INT id colonna id è ovviamente il PK e viene utilizzata come identificatore globale per tutti gli articoli. […]

Numeri seriali per gruppo di righe per chiave composta

Sto cercando di mantenere una tabella cronologica degli indirizzi: CREATE TABLE address_history ( person_id int, sequence int, timestamp datetime default current_timestamp, address text, original_address text, previous_address text, PRIMARY KEY(person_id, sequence), FOREIGN KEY(person_id) REFERENCES people.id ); Mi chiedo se esiste un modo semplice per numerare automaticamente / vincolare la sequence in address_history per contare automaticamente da […]

Hash Collision: quali sono le probabilità?

Ho del codice sul mio sito PHP che crea un hash casuale (usando sha1() ) e lo uso per abbinare i record nel database. Quali sono le possibilità di una collisione? Dovrei generare l’hash, quindi controllare prima se è presente nel database (preferisco evitare una query aggiuntiva) o inserirlo automaticamente, in base alla probabilità che […]

Schema del database che può supportare proprietà specializzate

Ho bisogno di memorizzare una serie di quadro, di cui esistono diverse versioni specializzate. Hanno alcune proprietà comuni, ma quelle specializzate contengono proprietà specifiche per quell’ quadro. soluzioni L’archivio dati è un DBMS relazionale e non è un argomento di discussione 🙂 In particolare, è Microsoft SQL Server 2005. Potrei facilmente creare una tabella per […]

Chiave primaria composta o no?

Ecco cosa mi sta confondendo. Ho spesso chiavi primarie composite nelle tabelle del database. Il lato negativo di questo approccio è che ho un bel lavoro extra quando elimino o modifichi le voci. Tuttavia, ritengo che questo approccio sia nello spirito del design del database. Dall’altro lato, ci sono miei amici, che non usano mai […]

DO e DONT per gli indici

Quali sono alcuni DO e DONT per migliorare le prestazioni del database usando l’indice? Un DO sarebbe un caso in cui si dovrebbe creare un indice o un altro suggerimento relativo agli indici che migliorerà le prestazioni. Un DONT sarà un caso in cui un indice non deve essere creato o un’altra azione correlata all’indice […]