.NET Questions (CLOSED)Questions and Answers on any aspect of .NET. Now closed. |
||
|
This discussion group is now closed.
Have a question about .NET development? Try stackoverflow.com, a worldwide community of great developers asking and answering questions 24 hours a day. The archives of .NET Questions contain years of Q&A. Even older .NET Questions are still online, too. |
Im in the process of picking a database for my app and initially I was just going to use SQL Server Express. However, after some surfing I came across an Object Oriented database named, db40, which makes a pretty sexy case for abandoning SQL altogether.
Has anyone had any experience with this database?
Joo Monday, February 06, 2006
Just looking at the site, it is licenced for commercial use. SQL Server express isn't.
Ace Tuesday, February 07, 2006
"SQL Server express isn't. "
What are you calling commercial use? I was under the impression that SQL Server Express is available for commercial use. Do you have a specific licensing link that tells you this? Are you sure that you aren't talking about the Developer Edition? If it's not available for commercial use then why have it at all?
Turtle Rustler Tuesday, February 07, 2006
Turtle,
That was my initial reaction to Ace's comment as well. I don't think Ace is saying that you can't use SQL Server 2005 Express for production use; you obviously can. I think Ace is referring to embedding into commercial applications as outlined here: http://www.db4o.com/commercial/ Although, one could argue that the facility to ship SQL Server Express with an application and bind it tightly via .NET is the equivalent of the db4o embedding.
Mike, very interesting. But from your link it says that embedding db40 into your application costs $9 per seat when purchased in increments of 10,000. I wonder what it costs when purchased in increments of 1 seat?!?!? SQL Server Express can be redistributed for free with your application once you agree to the licensing terms and submit the redistribution form.
Also, db40 doesn't give you any direct pricing up front. You have to contact their "sales guys" and get a high pressure sales pitch first. No thanks...
Turtle Rustler Tuesday, February 07, 2006
Yes, it is difficult to beat the SQL Server 2005 Express price tag of free. I'll be sticking with SQL Server unless someone can come up with a compelling case to switch.
One compelling case to switch to db4o is the fact that you save tons of lines of code to persist objects rather than transitioning them into relational tables, and also achieve a much better performance, especially when you talk about complex object models. Once you refactor you class model, db4o automatically updates the schemas, so maintaining your code also becomes much more seamless.
With Native Queries you have a database API that is entirely in C#, which gives you type-safety (-> less errors) and automatic refactoring through the IDE, if you ever decide to change your model. Just do that with SQL Express and you know what I mean. With the time (and resources) you save, you can easily afford the very low (commercial) licensing fees, which start at $199 per seat - to answer the question above. You can also use db4o's free GPL version as long as you don't redistribute your derivative work or open its sources under the GPL, too. Hope this helps, Christof Objects Are Here to Stay!
If you can show me an easier way to do the following I will consider it:
ALTER PROCEDURE [dbo].[spGetEVByChargeCode] @timeslot int AS DECLARE @statusDate datetime SELECT @statusDate = endDate FROM Periods WHERE periodID = @timeslot --Set NOCOUNT ON to stop intermediate server messages SET NOCOUNT ON --Create a temp table to hold earned value from tasks with milestones CREATE TABLE #EarnedValue ( codeID int, EV money) --Populate the earned value temp table using milestone status based on the supplied status date INSERT INTO #EarnedValue SELECT z1.codeID, (SELECT SUM(milestoneValue * percentComplete) FROM Milestones k JOIN MilestoneStatus l ON k.milestoneID = l.milestoneID WHERE milestoneCode = z1.codeID AND statusDate = (SELECT MAX(statusDate) FROM MilestoneStatus m WHERE statusDate <= @statusDate AND m.milestoneID = k.milestoneID)) AS EV FROM ChargeCodes z1 --Create table of LOE charge codes CREATE TABLE #LOE ( codeID int, EV money) --Populate the LOE table with earned value amounts INSERT INTO #LOE SELECT d3.codeID, (SELECT SUM(CASE WHEN g.taskFinish <= @statusDate THEN (plannedHours * e.laborRate) WHEN g.taskStart >= @statusDate THEN 0 ELSE ((plannedHours * e.laborRate)/DATEDIFF(dy, g.taskStart, g.taskFinish)) * DATEDIFF(dy, g.taskStart, @statusDate) END) FROM PlannedHours e JOIN Tasks g ON e.taskID = g.taskID WHERE g.taskCode = d3.codeID) FROM (SELECT d1.codeID, SUM(milestoneValue) AS EV FROM ChargeCodes d1 LEFT JOIN Milestones d2 ON d1.codeID = d2.milestoneCode GROUP BY d1.codeID) AS d3 WHERE d3.EV IS NULL --Update the earned value temp table with the LOE charge code EV amounts UPDATE ev1 SET ev1.EV = loe1.EV FROM #EarnedValue ev1 JOIN #LOE loe1 ON ev1.codeID = loe1.codeID --Drop the LOE temp table DROP TABLE #LOE -- Main code for EV worksheet. Gets the primary EV numbers for use in code or manual operations SELECT a.codeID, a.chargeCode, a.codeDescription, (SELECT SUM(plannedHours * laborRate) FROM PlannedHours b JOIN Tasks z5 ON b.taskID = z5.taskID WHERE z5.taskCode = a.codeID) AS budget, (SELECT MIN(j1.Dt) FROM ( SELECT taskStart AS Dt FROM Tasks h1 WHERE h1.taskCode = a.codeID UNION SELECT milestoneDueDate AS Dt FROM Milestones i1 WHERE i1.milestoneCode = a.codeID) AS j1) AS Begins, (SELECT MAX(j.Dt) FROM ( SELECT taskFinish AS Dt FROM Tasks h WHERE h.taskCode = a.codeID UNION SELECT milestoneDueDate AS Dt FROM Milestones i WHERE i.milestoneCode = a.codeID) AS j) AS Ends, (SELECT SUM(CASE WHEN g.taskFinish <= @statusDate THEN (plannedHours * e.laborRate) WHEN g.taskStart >= @statusDate THEN 0 ELSE ((plannedHours * e.laborRate)/DATEDIFF(dy, g.taskStart, g.taskFinish)) * DATEDIFF(dy, g.taskStart, @statusDate) END) FROM PlannedHours e JOIN Tasks g ON e.taskID = g.taskID WHERE g.taskCode = a.codeID) AS PV, (SELECT SUM(CASE WHEN d3.endDate <= @statusDate THEN (laborHours * d2.laborRate) WHEN d3.startDate >= @statusDate THEN 0 ELSE ((laborHours * d2.laborRate)/DATEDIFF(dy, d3.startDate, d3.endDate)) * DATEDIFF(dy, d3.startDate, @statusDate) END) FROM ActualHours d2 JOIN Periods d3 ON d2.period = d3.periodID WHERE d2.chargeCode = a.codeID) AS AC, (SELECT EV FROM #EarnedValue t1 WHERE t1.codeID = a.codeID) AS EV FROM ChargeCodes a ORDER BY a.chargeCode --Reset server messages SET NOCOUNT OFF --Drop the EV temp table DROP TABLE #EarnedValue |
|
Powered by FogBugz


