Estou trabalhando em um projeto no qual estou tentando decidir entre usar um banco de dados relacional SQL padrão ou objetos JSON para armazenar dados sobre um evento ou atividade.
O projeto armazenará dados em vários tipos de eventos, por isso decidi descrever apenas um tipo de evento para esta pergunta.
O evento de música ao vivo (descrito na íntegra usando o esquema JSON na parte inferior desta pergunta) é um objeto que armazena dados como onde o evento ocorrerá, a hora / data do evento e o custo do evento. O objeto de evento de música ao vivo tem um para um (evento -> nome, evento -> descrição) e um para muitos (evento -> locais, evento -> datas, evento -> tipos de ticket ) relacionamentos. Além disso, o objeto de evento pode conter um ou mais IDs do artista, que se vinculam ao objeto artista. O objeto executante armazena dados de músicos que estão se apresentando no evento de música ao vivo.
Os dados serão consultados pelos usuários usando simples ("Encontre-me eventos com o nome 'x'") e complexo ("Encontre-me eventos com o gênero musical 'x' e o custo 'y' dentro de um raio de 'z' do meu atual localização "). Os dados serão enviados pelos usuários usando um formulário da web.
Como você provavelmente pode perceber pelo esquema JSON definido, eu originalmente usaria objetos JSON para armazenar esses dados, mas ouvi algumas pessoas dizerem que, como meus dados são puramente relacionais, devo seguir os métodos mais antigos.
Eu apreciaria qualquer opinião sobre os prós e contras de cada abordagem, dadas as minhas necessidades. Se você precisar de algo esclarecido, não hesite em perguntar.
{
"event": {
"eventID":{
"type":"string"
},
"eventType":{
"type":"array",
"eventTypeItem":{
"type":"string"
}
},
"eventName":{
"type":"string"
},
"eventDescription":{
"type":"string"
},
"eventVenueList":{
"type":"array",
"eventVenueListID":{
"type":"integer"
}
},
"eventURL":{
"type":"string"
},
"eventTwitter":{
"type":"string"
},
"eventFB":{
"type":"string"
},
"eventInstagram":{
"type":"string"
},
"eventEmail":{
"type":"string",
"format":"email"
},
"eventContactPerson":{
"type":"string"
},
"eventDoorTime": {
"type":"string",
"format":"date-time"
},
"eventPerformerIDList":{
"type":"array",
"liveMusicPerformerID":{
"type":"integer"
}
},
"eventSetList":{
"type":"array",
"eventPerformerID":{
"type":"integer"
},
"eventPerformerStartTime":{
"type":"string",
"format":"date-time"
},
"eventPerformerEndTime":{
"type":"string",
"format":"date-time"
}
},
"eventDateList": {
"type":"array",
"eventDateItem": {
"type":"string",
"format":"date-time"
}
},
"eventDateStartTime": {
"type":"string",
"format":"date-time"
},
"eventDateEndTime": {
"type":"string",
"format":"date-time"
},
"eventTicket":{
"type":"array",
"eventTicketType":{
"type":"string"
},
"eventTicketLowPrice":{
"type":"number"
},
"eventTicketHighPrice":{
"type":"number"
},
"eventDatesAdvancePrice": {
"type":"number"
}
}
},
"performer": {
"performerID": {
"type":"integer"
},
"performerType": {
"type":"string"
},
"performerName": {
"type":"string"
},
"performerAlternateName": {
"type":"array",
"performerAlterateNameItem":{
"type":"string"
}
},
"performerGenreList": {
"type":"array",
"performerGenreItem":{
"type":"string"
}
},
"performerURL": {
"type":"string"
}
}
}