Sql est le standard dans les langages de requête, mais il est parfois un peu bavard. J'écris actuellement un langage de requête limité qui rendra mes requêtes courantes plus rapides à écrire et avec un peu moins de surcharge mentale. Si vous écrivez une requête sur un bon schéma de base de données, vous joindrez toujours la clé primaire, les champs de clé étrangère, donc je pense qu'il ne devrait pas être nécessaire de les déclarer à chaque fois.Quelqu'un at-il écrit un langage de requête de niveau supérieur (que sql) qui génère sql pour les tâches courantes, sur les schémas limités
Donc, une requête pourrait ressembler.
select s.name, region.description from shop s
where monthly_sales.amount > 4000 and s.staff < 10
Les relations seraient
boutique - plusieurs à un - région,
boutique - un à plusieurs - monthly_sales
Le sql qui serait eqivilent à serait être
select distinct s.name, r.description
from shop s
join region r on shop.region_id = region.region_id
join monthly_sales ms on ms.shop_id = s.shop_id
where ms.sales.amount > 4000 and s.staff < 10
(le distinct est là que vous vous joignez à un un à plusieurs table (mon thly_sales) et vous ne sélectionnez pas de champs de cette table)
Je comprends que la requête d'origine ci-dessus peut être ambiguë pour certains schémas, c'est-à-dire s'il existe deux routes de relation entre deux des tables. Cependant, il existe des moyens de contourner (la plupart) de ceux-ci, surtout si vous limitez le schéma autorisé. La plupart des schémas possibles ne valent pas la peine d'être considérés de toute façon.
Je me demandais juste s'il y avait des tentatives pour faire quelque chose comme ça? (J'ai vu la plupart des solutions d'orm à faire quelques questions plus faciles)
EDIT: En fait j'aime vraiment sql. J'ai utilisé des solutions orm et regardé linq. Le meilleur que j'ai vu jusqu'ici est SQLalchemy (pour python). Cependant, autant que j'ai vu, ils n'offrent pas ce que je cherche.
LINQ-to-SQL n'a pas son propre langage de requête; et elle ne fournit pas non plus de syntaxe de requête - qui est fournie par LINQ plus généralement ... c'est-à-dire plus un ** consommateur ** qu'un ** fournisseur ** de ceci (bien que la cartographie etc. banal). –
Les trucs linq que j'ai vus semblent très limités et n'écrivent pas le sql comme c'est toujours mieux. Les ormes comme j'ai dit ne semblent pas être ce que je suis après. Le meilleur que j'ai vu est pour python (sqlalchemy). –
Ce ne serait pas magique si le langage de requête connaissait le schéma. Il le fait, car il connaît la clé primaire et les champs de clé étrangère. Hql fait du bon boulot. La clause where ci-dessus pourrait aller shop.monthly_sales.amount> 4000. Vous devez toujours vous souvenir du chemin de jointure et joindre le nom de la propriété, en particulier pour 2 jointures ou plus en profondeur. La surcharge mentale est faible pour une requête, mais en automatisant diverses requêtes ou en en faisant 20 dans une journée, cela devient fatigant, surtout quand la plupart du temps il y a une façon systématique de le trouver. Je serais heureux face à l'ambiguïté "une erreur". –