我有一个简单的MySQL脚本,我在Web应用程序中使用它完成重建/重置我的数据库到一个干净的初始状态。因此,在这个脚本中,我定义了我需要的各种表,存储过程等。
这是一个相当不错的初始解决方案b / c它很简单,并且可以完成工作而不会过度杀伤。但是有一些缺点。一个例子是打字。定义具有更丰富类型的存储过程会很好,所以我不需要像VARCHAR(64)那样重复声明。
因此,我的问题是:是否有一个很好的DSL来操作MySQL脚本?(例如,它最终可以生成有效的MySQL脚本),这实际上是一个很好的DSL而不是MySQL,而不是试图做很多,有太多的花里胡哨。如果语言本身对DSL有很好的支持会很好,但更重要的是,找到一些与特定Web框架没有很大关系的东西会很好。
一些粗略的搜索没有产生任何明显的结果。
我想一个实际的替代方案就是使用你最喜欢的ORM来获得一个非常好的解决方案。因此,这个问题的部分动机是看看DSL方法是否已被探索取得任何成功。
答案 0 :(得分:2)
我假设您的意思是内部DSL(请参阅http://martinfowler.com/bliki/DomainSpecificLanguage.html和http://en.wikipedia.org/wiki/Domain-specific_language),因为SQL 是 DSL,即外部DSL(按照Martin Fowler的定义,获得了相当广泛的认可。)
鉴于这种假设,并且不知道您喜欢哪种语言,我能够找到一些用于SQL代码生成的内部DSL:
如果你谷歌“SQL DSL”还有更多,也尝试谷歌搜索“SQL DSL [在这里输入你最喜欢的语言]”,你可能会发现更合适的东西。
另一种具有不同优点和缺点(比内部DSL)的方法是从模板生成SQL代码。可以是带有变量转义(或连接)的字符串形式的模板,也可以是使用模板语言的单独文件中的模板。