软删除一个好主意或坏主意? 而不是实际删除数据库中的logging,只需将其标记为IsDeleted = true ,并在恢复logging时,可以将其标记为False 。 这是一个好主意吗? 将物理删除logging,然后将其移动到归档数据库是更好的办法,如果用户想要logging,那么软件会查找归档中的logging并重新创buildlogging?
是否有可能在一个SQLite数据库craete有一个默认为DATETIME('now')的时间戳列的表? 喜欢这个: CREATE TABLE test ( id INTEGER PRIMARY KEY AUTOINCREMENT, t TIMESTAMP DEFAULT DATETIME('now') ); 这给了一个错误…如何解决?
对于目前公认的企业应用程序devise模式的优点,我真的需要看到一些诚实而深思熟虑的辩论。 我不相信实体对象应该存在。 通过实体对象,我指的是我们倾向于为我们的应用程序构build的典型事物,如“人员”,“账户”,“订单”等。 我目前的devise理念是这样的: 所有数据库访问都必须通过存储过程完成。 无论何时需要数据,调用存储过程并遍历SqlDataReader或DataTable中的行 (注意:我也用Java EE构build了企业应用程序,请将java代码replace为我的.NET示例) 我不是反OO。 我为了不同的目的写了大量的类,而不是实体。 我承认,我写的很大一部分类是静态辅助类。 我不是在玩玩具。 我正在谈论的是跨多台机器部署的大量大量事务性应用程序。 Web应用程序,Windows服务,Web服务,B2C交互,你的名字。 我使用了OR映射器。 我写了几个。 我已经使用了Java EE堆栈,CSLA和一些其他的等价物。 我不仅使用它们,而且在生产环境中积极开发和维护这些应用程序。 我得出了一个经过testing的结论,即实体对象正在阻碍我们,没有它们,我们的生活将变得如此简单。 考虑一下这个简单的例子:你得到了一个关于你的应用程序中某个页面的支持调用不能正常工作,也许其中一个字段没有被保持。 使用我的模型,分配到查找问题的开发人员只打开3个文件 。 一个ASPX,一个ASPX.CS和一个带有存储过程的SQL文件。 这个问题可能是存储过程调用中缺less的参数,需要花费几分钟的时间来解决。 但是对于任何实体模型,您总是会启动debugging器,开始逐步执行代码,最终可能会在Visual Studio中打开15-20个文件。 当你下到堆栈底部时,你忘记了开始的地方。 我们一次只能把这么多东西留在脑海里。 软件非常复杂,无需添加任何不必要的图层。 开发的复杂性和故障排除只是我抱怨的一个方面。 现在我们来谈谈可扩展性。 开发人员是否意识到,每次编写或修改任何与数据库交互的代码时,他们都需要对数据库的确切影响进行深入的分析。 而不仅仅是开发副本,我的意思是生产的模仿,所以你可以看到,你现在需要的对象的额外的列只是使当前的查询计划失效,并在1秒内运行的报告现在需要2分钟,只是因为你添加了一列到select列表? 事实certificate,你现在需要的索引是如此之大,DBA将不得不修改你的文件的物理布局? 如果让人们从抽象的物理数据存储区离得太远,他们将对需要扩展的应用程序造成严重破坏。 我不是一个狂热者。 我可以相信,如果我错了,也许我是,因为有这样一个强大的推动LINQ的SQL,ADO.NET的EF,Hibernate的,Java EE的等请考虑通过您的回应,如果我失去了一些东西真的想知道这是什么,为什么我应该改变我的想法。 [编辑] 看起来这个问题突然激活了,所以现在我们有了新的评论function,我直接评论了几个答案。 感谢您的回复,我认为这是一个健康的讨论。 我应该更清楚地说我正在谈论企业应用程序。 我真的不能评论某人在桌面上运行的游戏或移动应用程序。 有一件事我不得不放在这里,回答几个类似的答案:正交性和关注点的分离经常被引用为实体/ ORM的理由。 对我而言,存储过程是我能想到的关注点分离的最好例子。 如果你不允许所有其他的访问数据库,而不是通过存储过程,那么理论上可以重新devise你的整个数据模型,而不会破坏任何代码,只要你维护存储过程的input和输出即可。 他们是合同编程的完美例子(只要你避免“select*”并logging结果集)。 问一个已经在这个行业工作了很长时间的人,他曾经用过很长时间的应用程序:在数据库已经存在的时候,有多less应用程序和UI层来了? 当有4个或5个不同的持久层生成SQL来获取数据时,调整和重构数据库有多困难? 你不能改变任何东西! ORM或任何生成SQL的代码都会locking您的数据库 。
使用postgres 8.4,我的目标是更新现有的表格: CREATE TABLE public.dummy ( address_id SERIAL, addr1 character(40), addr2 character(40), city character(25), state character(2), zip character(5), customer boolean, supplier boolean, partner boolean ) WITH ( OIDS=FALSE ); 最初我使用insert语句testing了我的查询: insert into address customer,supplier,partner SELECT case when cust.addr1 is not null then TRUE else FALSE end customer, case when suppl.addr1 is not null then TRUE […]
我有一堆产品订单,我试图根据date进行分组并计算该date的数量。 我怎么能不按月份/日/年分组呢? 3/8/2010 7:42:00应与3/8/2010 4:15:00分组
我是一个在SQL Server项目上工作的MySQL人,试图让datetime字段显示当前时间。 在MySQL中我会使用NOW(),但它不接受。 INSERT INTO timelog (datetime_filed) VALUES (NOW())
我有一个长度为6的SQL列。现在只想取该列的第一个字符。 有没有在SQL中的任何string函数来做到这一点?
我有2个命令,需要他们都正确执行或没有执行。 所以我想我需要一个交易,但我不知道如何正确使用它。 以下脚本有什么问题? BEGIN TRANSACTION [Tran1] INSERT INTO [Test].[dbo].[T1] ([Title], [AVG]) VALUES ('Tidd130', 130), ('Tidd230', 230) UPDATE [Test].[dbo].[T1] SET [Title] = N'az2' ,[AVG] = 1 WHERE [dbo].[T1].[Title] = N'az' COMMIT TRANSACTION [Tran1] GO insert命令执行但update命令有问题。 我怎样才能实现这个回滚两个命令,如果他们有任何执行错误?
我有数据types定义为: data ComitteeView = CommitteeView { committeeId :: CommitteeId , committeeMembers :: [Person] } data CommitteesView = CommitteesView { committeeView :: [CommitteeView] } 现在,现在,我有一个永久模型定义为: Person name Text Committee name Text CommitteePerson personId PersonId committeeId CommitteeId 我可以很容易地创build一个查询来填充一个委托,使用Esqueleto。 它会像这样: getCommitteeView cid = CommitteeView <$> runDB $ select $ from (person `InnerJoin` pxc `InnerJoin` committee) -> do on […]
在debugging期间,我们可以在SQL Server Management Studio(SSMS)中查看表值variables中的值(行和单元格)吗? 如果是的话,怎么样?