O que é isso
Tenha muitas histórias (com muitas falas em cada uma). Cada um traduzido em vários idiomas. Cada idioma tem muitos sotaques. Eu gostaria de oferecer ao usuário a escolha dos idiomas (pode escolher muitos dos quais abrangem todas as histórias) e depois escolher exatamente um sotaque de todos os sotaques de cada idioma.
Exemplo de dados
Suponha que temos 2 histórias, cada uma traduzida em 3 idiomas e cada idioma tem 5 sotaques (áudio vocal)
Requisito de acesso a dados
Agora pense que o usuário escolheu
o Idioma 2 com acento 1 e o Idioma 3 com acento 4
Agora o áudio será reproduzido como a seguir
Story 1 > Line 1 from Language 2 of Accent 1
entãoStory 1 > Line 1 from Language 3 of Accent 4
Story 1 > Line 2 from Language 2 of Accent 1
então `História 1> Linha 2 do Idioma 3 do Sotaque 4- // continua até o final da história e então começa uma nova história e joga assim
Possíveis entidades/tabelas
- Histórias
- Linhas
- línguas
- Acentos
- Áudios
Obviamente eu inventei isso, preciso de ajuda aqui.
Onde a ajuda é necessária
Para cumprir o uso pretendido dos dados, como deveriam ser as tabelas, quais seriam as relações entre elas (como stories hasMany Languages
coisas assim).
E ...
Como posso consultar dados para oferecer ao usuário sobre a 1ª seleção na seção "O que é" no topo.
Sobre mim: tenho experiência em desenvolvimento de software, mas não tanto em design de esquemas complexos. Eu (acho) posso lidar com coisas de banco de dados bastante complexas, mas obviamente não isso.
Info: estou fazendo em MySQL (MariaDB)
Na minha opinião, sua tarefa é simples o suficiente para escrever código que funcione 'identicamente' tanto no MariaDB quanto no MySQL.
Há duas “coisas” em que pensar:
Stories
)FORIGN KEYs
eJOINs
. E possivelmente através de uma tabela de mapeamento "muitos para muitos".Deixe-me discutir três padrões de esquema:
id
e uma string mais longa.Deixe-me dar o seu exemplo,
stories hasMany Languages
onde a tabelaStories
contém informações gerais sobre histórias. (Esta é uma "Entidade".)Outra tabela,
Stories_Languages
, possuistory_id
uma coluna (lang_id
) com "en_US", "en_GB", "fr_FR", "fr_CA, etc. (Este é um "Relacionamento".)Se isso é tudo que você precisa para idioma/sotaque, então
Stories
é uma tabela simples "um para muitos" eStories_Languages
uma tabela de mapeamento simples.No entanto, se houver muitos detalhes sobre o idioma, você precisará de uma tabela de entidades separada
Languages
eStories_Languages
se tornará uma tabela "muitos para muitos" completa.Olhando para o seu diagrama, acho que sua dificuldade começa onde você erroneamente tenta modelar "Línguas" como subordinadas de "Linhas", quando na verdade é uma entidade independente. Além disso, o resto do modelo parece bom no nível conceitual.
Levando em consideração as chaves, existe o problema comum de colocar uma coluna Id como chave primária em todos os lugares. Pelo menos você não usou outro id para “Áudios”.
Depois de corrigir o primeiro problema e tentar um uso mais lógico de substitutos para compor chaves relacionais, acho que você pode usar um modelo semelhante a este:
Para sua próxima pergunta, não tenho certeza do que você está tentando consultar, mas será bastante fácil. Por exemplo, você pode usar algo assim para obter o progresso da narração de uma história em um sotaque de idioma específico:
Depois de uma segunda leitura, acho que entendi melhor os requisitos da sua consulta. Para obter uma lista dos sotaques em que cada história é totalmente narrada, você pode usar algo assim:
Este é o melhor que posso encontrar agora, mas pode haver uma solução mais simples.