tag:blogger.com,1999:blog-426922399870577072.post489689270196685281..comments2024-03-18T12:21:07.034-04:00Comments on The Database Programmer: Historical Perspective of ORM and AlternativesKenDownshttp://www.blogger.com/profile/11117175783163937575noreply@blogger.comBlogger38125tag:blogger.com,1999:blog-426922399870577072.post-82838511537473641612023-11-10T05:23:19.259-05:002023-11-10T05:23:19.259-05:00Join our comprehensive API testing training in Hyd...Join our comprehensive API testing training in Hyderabad. Learn best practices, gain hands-on experience, and excel in API testing for a successful IT career.<br /><a href="https://3zenx.com/api-course-training-institute-in-hyderabad" rel="nofollow">API testing training in hyderabad</a>3zenxhttps://www.blogger.com/profile/13622295672972821646noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-36035885177228941932023-09-09T00:53:13.044-04:002023-09-09T00:53:13.044-04:00I'm sorry for acting like I want to jump on yo...I'm sorry for acting like I want to jump on you. I just like taking the piss out of uplifting, viral internet things. our clinbio.comsclinbiohttps://www.blogger.com/profile/13370742983082055641noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-5120147384254352602023-04-19T13:16:47.103-04:002023-04-19T13:16:47.103-04:00Finding the right outsourcing service can be a cha...Finding the right outsourcing service can be a challenge, but with this particular service, you can access a team of skilled developers, programmers, and other professionals to help you automate your project. This service like <a href="https://www.hiredynamicsdevelopers.com/hire-microsoft-dynamics-consultant/" rel="nofollow">Hire MS Dynamics Consultant</a> is available to both startups and established businesses, making it a versatile and valuable resource. Ivan Farafonovhttps://www.blogger.com/profile/13478549655875800474noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-11089619524288808902023-04-14T09:49:17.347-04:002023-04-14T09:49:17.347-04:00Hello! If you are looking for the best React devel...Hello! If you are looking for the best React developer to develop an application or an online store, but are lost in choosing a consulting partner, then our outsourcing company will help you in choosing a developer and even allow you to create an entire team if necessary. Details on our website! <a href="https://www.findreactdevelopers.com/checklist-of-choosing-react-app-development-services/" rel="nofollow">Hire React JS Devs</a>Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-10203745747970796252022-11-22T03:20:19.557-05:002022-11-22T03:20:19.557-05:00HI IAM CHARAN At Brolly Academy, we aim to provide...HI IAM CHARAN At Brolly Academy, we aim to provide you with the best React JS training in Hyderabad. We will provide you with comprehensive training that covers React JS topics such as ReactJS Introduction, Overview of JSX, ReactJS Environment Setups, ReactJS Forms and UI, Life Cycles Overview, Handling in JSX, Flux Overview, features of React 16 and Unit Testing, etc.<br /><br />IAM FR,O H.Y.Dmulemasterhttps://www.blogger.com/profile/16017225940335804652noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-1819361910901449532022-10-18T01:58:28.637-04:002022-10-18T01:58:28.637-04:00Thanks for providing this information
Best Power ...Thanks for providing this information <br /><a href="https://onlineitguru.com/power-bi-training.html" rel="nofollow">Best Power BI Online Training</a><br /><a href="https://onlineitguru.com/power-bi-training.html" rel="nofollow">Power BI Training</a><br />bhanuhttps://www.blogger.com/profile/07882078335453004523noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-8664796974204315362022-08-13T02:42:15.662-04:002022-08-13T02:42:15.662-04:00Informative blog post.Informative blog post.jayhttps://fullstackmasters.in/noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-57984429328710381182022-08-03T05:32:39.788-04:002022-08-03T05:32:39.788-04:00React JS Training in Hyderabad
At Brolly Academy, ...<a href="https://fullstackmasters.in/react-js-training/" rel="nofollow">React JS Training in Hyderabad</a><br />At Brolly Academy, we aim to provide you with the best React JS training in Hyderabad. We will provide you with comprehensive training that covers React JS topics such as ReactJS Introduction, Overview of JSX, ReactJS Environment Setups, ReactJS Forms and UI, Life Cycles Overview, Handling in JSX, Flux Overview, features of React 16 and Unit Testing, etc. Sunilnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-26578969783329914562018-12-31T05:02:22.419-05:002018-12-31T05:02:22.419-05:00This comment has been removed by the author.v4bhttps://www.blogger.com/profile/10490854245930067803noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-39102237501133012272014-03-22T20:38:11.492-04:002014-03-22T20:38:11.492-04:00What I wish more than anything, is that I could fi...What I wish more than anything, is that I could find an example, several, of the impedance mismatch. I want to see the SQL case that is supposedly "bad" and how an ORM solves this.<br /><br />I'd also like to see things about maintainability and embedded SQL.<br /><br />Thanks for the article. I can't find what I need anywhere, but you've put me one step closer.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-10551040428048679462012-12-04T10:18:24.633-05:002012-12-04T10:18:24.633-05:00Thanks For Blog :)Thanks For Blog :)Osmanlı ansiklopedisihttp://osmanliansiklopedisi.blogspot.com/noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-68256800563767136782012-10-23T02:41:17.450-04:002012-10-23T02:41:17.450-04:00I feel like I come from a sort of in-between appro...I feel like I come from a sort of in-between approach, one that I have seen used in enterprise-level web applications, but which I don't see championed much. I don't like ORM. Now, the retorts I get often devolve (sometimes immediately) into "So, you'd rather use embedded SQL?" No, I wouldn't. <br /><br />What I prefer is a class that simply takes the name of a stored procedures, along with its parameters, which then returns the requested data. The caller can massage the data, if necessary, before returning it to the application. Lightweight, easy to create, test and maintain. Anyone know knows SQL can pick it up and run, instead of having to learn usage of another intermediate tool. <br /><br />On jobs where this approach is used, I looked at the database, and then wrote a stored procedure to get the data I needed. I could test it in the same interface to make sure the data returned was correct. I can see right there how the database is designed, so I can also write the C-UD procedure(s). This, too, can be tested right away. Once those items are established, all I need ever do is ensure the application pass the correct name of the stored procedure, along with its parameters, and I will receive the correct data every time. I suppose this places supreme faith in the data model, and I accept that as a requirement - a good one. <br /><br />I compare that to the projects I've had to work on that are inseparable from ADO. I am tasked with creating a new feature, and rather than just writing a simple query to get me the data I need, I have to start looking through all the available adapters hoping to find a method that returns what I need. God forbid I don't find one, because then I have to beseech the lead programmer(s) for the blessing to create new methods or adapters or tables that will add another chunk to the 20,000 lines of existing generated DAL code. There's also another extreme, where the lead developer knows enough SQL to get some data, but hates joins and relations for some dogmatic reason, and so every stored procedure is filled with cursors. <br /><br />I find this utterly frustrating. I already know how to view and retrieve the data from the database - using the language expressly designed for doing that, no less. It's awesome to work at a place where I can just sit down and use that language to do my job. My brain wants to punch something when a new job is like "Make this new feature," and I'm already conjuring the SQL to do that, only to find I have to learn some entirely separate construct that will speak SQL for me. Why not just write an OOP database platform, instead of a massive, automatically generated OOP layer that sits (heavily) on top of RDBMS? <br /><br />At the end of the day, it strikes me as lots of time and effort just to avoid ever learning RDBMS/SQL. I realize that doesn't reflect everyone, but I think that's at the core of the problem. I have yet to have a RL discussion about this with someone who truly understands RDBMS, but prefers ORM. I've recently tried to suggest the above lightweight approach in my current job, and the lead developer's only reason for not implementing something like it is "I've mad a design decision to use ORM," mixed with the same tired justifications - joins are expensive, joins are confusing, flattened data is easier, we can control it in the ORM/application, we need the returned data to be strongly typed (though it's often handled in javascript), I know XYZ is slower when done in the application but it's a worthy tradeoff, etc, etc, etc.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-5732689015557597202012-07-20T08:09:42.585-04:002012-07-20T08:09:42.585-04:00- 2. Whether you like it or not, the database exi...- 2. Whether you like it or not, the database exists for the non-technical to get at the data. This is by design. Reporting, adhoc queries, Excel dumps, prettified views, etc. will all be dependent on your database and your schema. Don’t think for a second that you can just live in your IDE, make domain model changes, and click update database and you won’t have maintainability problems. Ring ring, accounting can’t print checks any more after you made that last change to the Vendor class – but I unit tested, you say. Really? You unit tested the class and factored in the check printing process and the fact it needed to use a field you removed because it didn’t fit in your awesome abstract domain model? Or maybe you could just deny direct read access to the database – but now you are the same monolithic scum that you were trying to avoid when you went with an ORM in the first place; I need to be able to switch the backend on demand – in a whiny voice.<br />- 3. And the final kick in the pants – accept the fact that programming is hard and the most important part of the job is architecture. Maintainability is dependent on the programming task at hand, with good architectural decisions that have been applied to ALL of the concerns. UI, BL, data storage, history, reporting, analysis, integration, etc. If you can’t do it on your own, then hire an architect. If you applied the same OOP/ORM principles with a disregard to the database and other storage concerns to building a house, your home would be a sad and lonely place. Because without the architect, your toilet would never flush because you chose the wrong size pipes for the water supply and the pressure is too low, and your electricity is being fed by a gas generator that sputters and barely puts out 20 AMPS. Since you opted for just a ‘persistence’ layer, the foundation is cracking and beginning to sag around the corners. But hey, at least you have a completely reusable toilet class that subclasses a ‘chair with hole class’ that could be subclassed to make a ‘laundry chute class’. And it’s all easily maintainable because I can unit test it in my perfect wonka-domain (of course the construction guys will have to rip out drywall and pour more concrete but that’s none of my concern – my tests succeed!)<br />So to recap – I am not down on ORM – I repeat, I am not down on ORM, I simply detest the ways it is being used and recommended and the complete and utter disregard for the other ‘important’ parts of the application you are developing but not addressing because there is not a one-click mapping tool to handle the work.<br /><br />Ok I’m going to bed now. -SiFiSiZZLE FiNGERhttp://www.sizzlefinger.comnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-63408090968045080122012-07-20T08:09:01.838-04:002012-07-20T08:09:01.838-04:00Great post - my sentiments exactly. It's nice...Great post - my sentiments exactly. It's nice to see that almost 2 years after this post, the ORM concept is still preventing millions of programmers from ever learning how to use an RDBMS! I tell my kids that I will always have a job as long as ORM is around - thank you ORM for all that you do to protect programmers from the scary database engine! I find it laughable when I see posts and comments about ORM and even LINQ to SQL and there 'superiority' to the database engine and 'antiquated' SQL. Hello! These frameworks are generating SQL! What's even more disturbing is the lack of understanding on what critical problems the RDBMS is solving for storing AND 'READING' data. So I emphasize reading because this new breed of ‘web developer’ seems to be solely focused on 'persisting' and reading data as part of the application state only. And some things will never change – reporting, data warehousing, data analysis etc. always is the last thing on everyone's mind; you think your well thought out domain model with auto-generated tables is going to hold up with millions of rows and years of data collection? There are generally only a few ways to capture data for any specific problem, but there are unlimited ways to use that data, compare it, contrast it, summarize it, etc. Let me think - do I really want Larry the sales guy running a sales report that analyzes a million rows of data and crushes my database server because the ORM I used didn't normalize my tables for me, add the appropriate indexes, and determine the proper data types and sizes; even worse I paired my ORM with CouchDB. Does anyone writing software today with ORM on the brain have any sense of historical data requirements by not deleting data but marking it? What about record version schemes, multi-cultural data sets, shared database solutions with multi-owner/multi company data, and the list goes on and on – the only right way to handle these requirements is to intelligently pick an RDBMS and architect the data layer accordingly. Anyway these are my rants on ORM and I will say that ORM is useful, but I am a strategist and I solve problems case by case. So I would never say that it can’t be used, but I will say that it is overused primarily because the developer doesn’t realize what they will be facing down the road. But that’s called experience, isn’t it. Here’s my rebuttal to maintainability in the absence of the ORM (but this does not apply to applications that start as blogs and morph into a travel booking system because you had no idea what your application would turn into when you had that flash-in-the-pan moment):<br />- 1. My data layer is more important to me than the application that writes to it – even a middle tier where all the BL is located. Why? Because the data is priceless – it lives forever. Your business logic could literally change between sales managers (now make the sales discounts apply only if the sales reps last name starts with Jones!). There will be paradigm shifts in client tools and mapping tools before there will be a need to throw away the precious, precious data that has persisted in my well thought out data structure. Why would I want to be tied to any one specific ORM, or programming library/language for the lifetime of my datasets??? So I argue – pick an RDBMS because of its capabilities to handle the kinds of data your application is capturing. You can put any client and adapt the BL in any way you see fit. But the RDBMS is priceless when you are long gone and your code no longer works because the OS doesn’t support your antiquated 64bit code any longer. I promise you that before your database is ever scrapped, you will be rewriting your client and BL layers. <br /><br /><br />...Continued to second post.SiZZLE FiNGERhttp://www.sizzlefinger.comnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-70717763132989612612012-05-23T14:21:01.086-04:002012-05-23T14:21:01.086-04:00it is nice to read this articulated and well-argum...it is nice to read this articulated and well-argument article.<br />last 5-6 years ORM hype turned so loud and so aggressive it's almost like 'social media' hype or 'reality shows' hype.<br /><br />there is one of the comments to this article that basically says that ORM 'preachers' are taking relational database system and its E-R model, as flat file.<br /> <br />that, in few clear and simple words, explains everything in ORM nonsense craze.<br /><br />ORM tool is nothing but a cheap trivialization of serious (and skilled and professional and creative and resourceful) software engineering and development. <br /><br />to me it is still amazing how could that even syntactical irritating and meaningless concept (like, does your care use Vehicle-Road-Mapper or maybe just plain-old wheels & tires?!) could gain so much followers.<br /><br />but, as in any other human activity, number of mediocre members who just follow the herd is always bigger then those who tend to keep their professional integrity in spite of fashionable hypes.Anonymousnoreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-48938109892894968042011-09-27T16:46:38.787-04:002011-09-27T16:46:38.787-04:00I personally think Hibernate is a curse and a time...I personally think Hibernate is a curse and a time sink with all its annotations and under-the-hood magic. I want to be as close as possible to SQL without the JDBC boilerplate. Simple mapping done programmatically (without XML or Annotations) can help a lot. With that premise in mind, <a href="http://mentabean.soliveirajr.com" rel="nofollow">MentaBean</a> was born, a good 4 years ago, when people were even more passionate about hibernate. The reception of <a href="http://mentabean.soliveirajr.com" rel="nofollow">MentaBean</a> back then was not very good. Well, someone was wrong and more and more projects are walking away from the ORM curse towards a more simple and lightweight approach through SQL builders. Take a look on <a href="http://mentabean.soliveirajr.com" rel="nofollow">MentaBean</a>. If you like SQL you may be surprised on how easy it lets you build queries while at the same time staying out of the way.Sergio Oliveira Jr.https://www.blogger.com/profile/15614515419794420385noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-37571283488886632692011-07-28T14:16:32.518-04:002011-07-28T14:16:32.518-04:00Don't forget that ORM users often create a dat...Don't forget that ORM users often create a database that is incredibly difficult to access outside of that ORM. No developer knows the physical data model, so no one can give the data warehouse team specs on how to pull the data out for analytics. Or worse, they give the warehouse team a "web service" to pull the data, and your warehouse ETL process now takes hours for a few thousand records!<br /><br />Vendor apps that are written using ORM concepts give data warehouse devs nightmares.nybhttps://www.blogger.com/profile/06111907939712607618noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-71692094605719959262011-06-23T19:16:06.049-04:002011-06-23T19:16:06.049-04:00What are your thoughts on MyBatis? I think it is a...What are your thoughts on MyBatis? I think it is a better fit between the object world and the RDBMS.theshowmecanuckhttps://www.blogger.com/profile/07573837559108830247noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-76773528962794956942011-06-03T17:01:16.878-04:002011-06-03T17:01:16.878-04:00one factor not mentioned is performance based on w...one factor not mentioned is performance based on what "tier" the business logic is being executed. Stored Procedures to execute business logic and execution on the data tier is much more efficient in comparison to loading into entities at an application level, performing the business logic "work" and then persisting the changes back to the datasource. <br /><br />I categorically refute the statement that SQL has not evolved...especially as an Oracle Database user where PL/SQL is extremely powerful, and much more efficient than using any object oriented programming language to perform the same tasks.<br /><br />I would argue that ORM's are extremely "inflexible" when the data model schema is constantly evolving throughout time and requires too much "code level" changes to update to a schema change.<br /><br />This fact alone makes ORM's cumbersome and difficult to work with in comparison to building out the business logic in the db itself.<br /><br />in summary:<br /><br />1. ORM's are slow...all of them<br />2. ORM's are not designed to adapt to "change" very efficientlyShawn Owstonhttps://www.blogger.com/profile/09688260255094984840noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-44984244309744668492011-01-06T18:07:01.883-05:002011-01-06T18:07:01.883-05:00>>The main point of course is that
>>i...>>The main point of course is that<br />>>it was all about how to efficiently <br />>>use a database. The language was <br />>>OOP, and the code was in a class, <br />>>but that had nothing to do with the <br />>>problem or the solution. <br />I think part of the problem trying to "protect" programmers, OO or not, from the database, like the database is an after thought. The example you gave happens over and over again. Happens with procedural programmers as well as OO though OO seems to exacerbate the disconnect. The common analogy is "if I was going to the grocery store with long list of items, would I buy one thing and go home, then go back and buy one other thing, then come home?" of course not, I go to the grocery and buy everything on my list. Seems obvious, but alas but coders make the same mistake over and over again.<br />As, I think Stephane Faroult put it, databases operate on row sets, not objects/variables.<br />I don't know of any ORM or any other layer way to fix this. It's how people think and what people are taught that has to be addressed. <br />Of course, I do think about automated ways of addressing the situation. I think of ways of finding the existing inefficient patterns and flagging them.<br />- Kyle<br />http://dboptimizer.comKyle Haileyhttps://www.blogger.com/profile/13586511268045480856noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-6103380861232107212011-01-02T06:39:45.866-05:002011-01-02T06:39:45.866-05:00Ken, that looks very interesting as well! One of t...Ken, that looks very interesting as well! One of the major problems I'm facing with jOOQ is the various databases' understanding of similar concepts, such as primary key, foreign key, relations etc.<br /><br />Unfortunately, the JDBC's standard DatabaseMetaData object is not reliable, as implementations are often incomplete. Instead I have to browse the meta-schema myself, which is a major source of errors. jOOQ might be able to build on top of a tool like triangulum-db (or Hibernate), to discover the meta-schema...<br /><br />Cheers and a happy New Year!Lukas Ederhttps://www.blogger.com/profile/02028559621679932902noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-86242267032681807412010-12-30T17:56:02.213-05:002010-12-30T17:56:02.213-05:00Lukas:
jOOQ looks fascinating. I will be interes...<a href="http://www.blogger.com/profile/02028559621679932902" rel="nofollow">Lukas:</a><br /><br />jOOQ looks fascinating. I will be interested in how it develops.<br /><br />I am working on a db building tool<br />http://http://code.google.com/p/triangulum-db/ (Triangulum), and one of the goals is to write out files in various languages that might feed into something like jOOQ.KenDownshttps://www.blogger.com/profile/11117175783163937575noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-74186796409728290662010-12-30T16:52:10.191-05:002010-12-30T16:52:10.191-05:00Thanks for this great article, Ken! Somehow it nev...Thanks for this great article, Ken! Somehow it never occurred to me to think about the ways programmers handled data back in the days before ORM. Your point of view really shows why people like me feel slightly awkward today when it comes to "mapping", "fine-tuning", and "persisting" data between the different worlds. I always thought that RDBMS (including vendor-specific extensions, such as stored procedures, etc) are the perfect way to model and handle data. On the other hand, all the "standard" solutions provided by the J2EE/JSR folks seemed to somehow ignore my love for RDMBS, obscuring more and more the data's heritage. To name a few: EJB1/2, Hibernate, JPA, Criteria Query...<br /><br />I wanted to go back to SQL, to the relational and support all the features that modern RDBMS offer today, without giving up on what Java can do. That is why I created <a href="http://jooq.sourceforge.net" rel="nofollow">jOOQ</a>, a new database abstraction tool handling all the drawbacks of interfacing with an RDBMS from Java/JDBC while giving full credit to SQL (via its DSL, similar to Linq) and proprietary features (such as UDTs, stored procedures, etc).<br /><br />I have written an article on that topic: http://java.dzone.com/announcements/simple-and-intuitive-approach. Any feedback is welcome!<br /><br />Cheers<br />LukasLukas Ederhttps://www.blogger.com/profile/02028559621679932902noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-14697398620396533282010-12-20T22:56:01.574-05:002010-12-20T22:56:01.574-05:00Adam: Your point on maintainability is well taken....Adam: Your point on maintainability is well taken. I'll have to consider working that into a separate post.KenDownshttps://www.blogger.com/profile/11117175783163937575noreply@blogger.comtag:blogger.com,1999:blog-426922399870577072.post-22976995334215714332010-12-20T22:55:01.071-05:002010-12-20T22:55:01.071-05:00Justis:
1) Sometimes they get it right the first ...Justis:<br /><br />1) Sometimes they get it right the first time<br /><br />2) Check out Common Table Expressions, window functions, others.KenDownshttps://www.blogger.com/profile/11117175783163937575noreply@blogger.com