小编Way*_*ina的帖子

您应该在SQL Server中选择MONEY或DECIMAL(x,y)数据类型吗?

我很好奇money数据类型和类似之间是否存在真正的差异decimal(19,4)(我认为这是内部使用的钱).

我知道这money是特定于SQL Server的.我想知道是否有令人信服的理由选择一个而不是另一个; 大多数SQL Server示例(例如AdventureWorks数据库)使用money而不是decimal价格信息之类的东西.

我应该继续使用money数据类型,还是使用十进制代替?Money输入的字符较少,但这不是有效的原因:)

sql-server types

420
推荐指数
11
解决办法
33万
查看次数

数据映射器,表数据网关(网关),数据访问对象(DAO)和存储库模式之间有什么区别?

我正在努力提高我的设计模式技巧,我很好奇这些模式之间有什么区别?所有这些看起来都是一样的 - 封装了特定实体的数据库逻辑,因此调用代码不了解底层持久层.从我的简短研究中,他们通常都会实现您的标准CRUD方法并抽象出特定于数据库的详细信息.

除了命名约定(例如CustomerMapper与CustomerDAO vs. CustomerGateway vs. CustomerRepository)之外,有什么区别?如果存在差异,您何时会选择一个而不是另一个?

在过去,我会编写类似于以下的代码(简化,自然 - 我通常不会使用公共属性):

public class Customer
{
    public long ID;
    public string FirstName;
    public string LastName;
    public string CompanyName;
}

public interface ICustomerGateway
{
    IList<Customer> GetAll();
    Customer GetCustomerByID(long id);
    bool AddNewCustomer(Customer customer);
    bool UpdateCustomer(Customer customer);
    bool DeleteCustomer(long id);
}
Run Code Online (Sandbox Code Playgroud)

并有一个CustomerGateway类为所有方法实现特定的数据库逻辑.有时我不会使用接口并使CustomerGateway上的所有方法都是静态的(我知道,我知道,这使得它不太可测试)所以我可以这样称呼它:

Customer cust = CustomerGateway.GetCustomerByID(42);
Run Code Online (Sandbox Code Playgroud)

这似乎与Data Mapper和Repository模式的原理相同; DAO模式(与Gateway相同,我认为?)似乎也鼓励特定于数据库的网关.

我错过了什么吗?有3-4种不同的方式做同样的事情似乎有点奇怪.

c# dao datamapper repository table-data-gateway

130
推荐指数
4
解决办法
3万
查看次数

WITH CHECK ADD CONSTRAINT后跟CHECK CONSTRAINT与ADD CONSTRAINT

我正在查看SQL Server 2008的AdventureWorks示例数据库,我在他们的创建脚本中看到他们倾向于使用以下内容:

ALTER TABLE [Production].[ProductCostHistory] WITH CHECK ADD 
CONSTRAINT [FK_ProductCostHistory_Product_ProductID] FOREIGN KEY([ProductID])
  REFERENCES [Production].[Product] ([ProductID])
GO
Run Code Online (Sandbox Code Playgroud)

紧接着是:

ALTER TABLE [Production].[ProductCostHistory] CHECK CONSTRAINT     
[FK_ProductCostHistory_Product_ProductID]
GO
Run Code Online (Sandbox Code Playgroud)

我看到这个用于外键(如此处),唯一约束和常规CHECK约束; DEFAULT约束使用我更熟悉的常规格式,例如:

ALTER TABLE [Production].[ProductCostHistory] ADD  CONSTRAINT  
[DF_ProductCostHistory_ModifiedDate]  DEFAULT (getdate()) FOR [ModifiedDate]
GO
Run Code Online (Sandbox Code Playgroud)

如果有的话,第一种方式与第二种方式之间有什么区别?

sql t-sql sql-server check-constraints

123
推荐指数
7
解决办法
11万
查看次数

您是否应该在数据库级别和应用程序级别强制执行约束?

我一直在阅读Dan Chak的"Enterprise Rails"一书,它让我想到:你觉得你应该在数据库级别和应用程序级别都有数据限制吗?或者你觉得类似于Ruby on Rails这样的自以为是的框架 - 数据库只是数据的"哑存储库",所有检查都应该在你的应用程序中完成(我不是想在这里挑出RoR - 我是一个我自己的Rails的巨大粉丝,但我不同意它对数据库的方法)?

就个人而言,我觉得你应该同时拥有它们,以确保你的数据库和应用程序安全.我的意思是你应该使用非空约束,如果已知的话给你的字段一个长度(而不是将它们全部留在nvarchar(255)),在数据库上有诸如外键,检查约束触发器之类的东西,然后还通过应用程序中的业务逻辑规则强制执行此操作.IMO通过其用户界面使您的应用程序更加健壮,并且还可以防止可能直接访问数据库的人员.

我经常看到的反驳论点是它需要重复逻辑; 一次在数据库级别,一次在应用程序级别 - 假设您有一个检查约束来验证是否输入了产品的SKU(即它的长度大于零).

您现在还需要在业务逻辑中包含验证方法,以确保用户输入的值的长度大于零,并且可能还有一些客户端Javascript用于在用户键入数据时捕获错误.

我认为这不是一件坏事 - 是的,你有一些重复的逻辑,但最终结果是"数据库作为堡垒"的思维模式,因为如果你考虑它,你的数据是你应用程序中最重要的部分; 毕竟,如果数据容易被破坏和泄露,那么你的新Web 2.0应用程序有什么用?

你对此有何看法?数据库应该是像诺克斯堡这样难以穿透的堡垒,还是一个被激光守护的开放式保险箱?换句话说,您是否应该牺牲一些逻辑重复来确保安全的数据模型,或者将所有内容留给您的应用程序并使用数据库来存储数据?

database-design

47
推荐指数
6
解决办法
9172
查看次数

当应用程序是100%CRUD时应用TDD

我经常遇到这个问题,我不知道如何克服这个障碍.我真的想开始学习和应用测试驱动开发(或BDD,或其他),但似乎我想要应用的每个应用程序,它几乎只是标准的数据库CRUD的东西,我不知道如何去应用它.除了被持久化到数据库之外,这些对象几乎不做任何事情; 没有需要测试的复杂逻辑.有一个网关,我最终需要测试第三方服务,但我想首先完成应用程序的核心.

每当我尝试编写测试时,我最终只会测试我可能不应该首先测试的基本内容(例如getter/setter),但它看起来不像对象有其他任何东西.我想我可以测试持久性,但这对我来说似乎永远不对,因为你不应该真的打到数据库,但如果你把它嘲笑,那么你真的没有测试任何东西,因为你控制了吐回来的数据; 就像我已经看到很多例子,其中有一个模拟存储库,通过循环和创建已知值列表来模拟数据库,并且测试验证"存储库"可以撤回某个值......我是没有看到这样的测试点,因为"存储库"当然会返回该值; 它在课堂上硬编码!好吧,我从纯TDD的角度看待它(也就是说你需要测试一下你的存储库需要一个GetCustomerByName方法或其他什么才能编写方法本身),但这看起来好像遵循了教条,除了它的"方式" - 除了证明方法合理之外,测试似乎没有做任何有用的事情.

我想错了吗?

例如,运行一次轧机联系管理应用程序.我们有联系人,让我们说我们可以向联系人发送消息.因此,我们有两个实体:ContactMessage每个实体具有共同的属性(例如,名字,姓氏,联系电子邮件,主题和正文以及消息的日期).如果这些对象都没有任何实际行为或需要执行任何逻辑,那么在设计这样的应用程序时如何应用TDD?该应用程序的唯一目的基本上是拉出联系人列表并在页面上显示它们,显示表单以发送消息等.我在这里没有看到任何有用的测试 - 我可以想到一些测试,但它们几乎是为了说"看,我有测试!"的测试.而不是实际测试某种逻辑(虽然Ruby on Rails很好地利用它,我并不认为测试验证是一个"有用的"测试,因为它应该是框架为你照顾的东西)

tdd

43
推荐指数
3
解决办法
6749
查看次数

当你无法修复表时,如何修复MySQL"错误的密钥文件"错误?

我正在尝试运行一个相当大的查询,该查询应该每晚运行以填充表格.我收到一个错误,Incorrect key file for table '/var/tmp/#sql_201e_0.MYI'; try to repair it但我正在使用的存储引擎(无论默认是什么,我猜?)不支持修复表.

我该如何解决这个问题,以便运行查询?

mysql mysql-error-126

38
推荐指数
4
解决办法
9万
查看次数

在工作中使用"边缘"语言的道德规范?

只想在这里征求意见.您如何使用在您所在地区未广泛使用的语言(和/或框架)来为公司编写软件?例如,我住在一个由.NET主导的区域,偶尔会有PHP工作.假设我正在学习Python并决定使用它为我的工作编写软件(我是一个团队,所以我几乎可以使用我想要的任何东西).

现在他们的软件是用一种语言编写的,该区域几乎没有人使用或知道; 如果我要离开公司,他们基本上没有人可以维护/加入它,除非他们留在我身边作为顾问.虽然这对我来说真的很好,但似乎有点"歪" - 被授予,这就是商业世界的运作方式.

你的想法是什么?

我应该提一下,这是一家非常小的公司,我是唯一的IT人员,所以我有充分的选择来选择我们的开发平台.我不是专门使用Python,而是选择它作为一个例子,因为我的区域几乎完全基于.NET; 我不再关心.NET了,这就是为什么我不想考虑使用它.此外,公司是..我们怎么说... 非常节俭,不会购买.NET所需的资源(例如服务器许可证,SQL许可证,Visual Studio,组件).我个人有一个MSDN订阅,但我不能使用它.

此外FWIW存在人在区域谁使用我使用(Ruby on Rails的)考虑到语言,但远不及尽可能多的人.NET开发人员.这不像是我正在使用只有我知道的东西.

programming-languages

27
推荐指数
6
解决办法
2386
查看次数

决定一个人工主键和Products表的自然键

基本上,我需要将来自多个供应商的产品数据组合到一个数据库中(当然,它比这更复杂),它有几个表需要连接在一起用于大多数OLTP操作.

我将坚持使用默认值并使用自动递增整数作为主键,但是当一个供应商提供他们自己的"ProductiD"字段时,其余的则没有,我将不得不做很多手动映射到另一个表然后加载数据(因为我必须首先将其加载到Products表中,然后将ID拉出并将其与我需要的其他信息一起添加到其他表中).

或者,我可以使用产品的SKU作为主键,因为SKU对于单个产品是唯一的,并且所有供应商都在其数据源中提供SKU.如果我使用SKU作为PK,那么我可以轻松加载数据源,因为所有内容都基于SKU,这就是它在现实世界中的工作方式.但是,SKU是字母数字的,并且可能比基于整数的密钥效率稍低.

我应该关注哪些想法?

database primary-key

21
推荐指数
2
解决办法
1万
查看次数

是否有基于ASP.NET MVC订阅的入门套件或示例?

基本上是处理基于订阅的服务的低级"管道"代码的东西.我看到许多涉及基本会员资格的事情,但没有处理订阅方面的事情(定期计费,设置计费的自动化工作,计费通知等).这可能是让我不能使用ASP.NET MVC来实现我的SaaS理念的一件事,因为编写自己的开发时间需要相当长的时间.如果我选择其他选项,Ruby on Rails,我可以购买一个套装,以250美元的价格完成所有这些工作.我还没有找到任何与.NET相关的东西 - 我见过的所有SaaS示例应用程序更像是StackOverflow等所有你有一个多人登录的站点,而不是你所在的Web应用程序模型订阅者每月收费,每个订户都有自己网站的用户和其他实体(例如客户,任务等).

有什么类似的ASP.NET,或者我必须编写自己的某些指导原则,所以我不浪费太多时间?作为一个创业公司,这意味着我自己正在做所有的编码.

我发现了这一点,但它似乎只是为了计费而且似乎没有太多(任何?)文档关于如何设置它.

asp.net-mvc saas multi-tenant

19
推荐指数
2
解决办法
4683
查看次数

RDLC报告数据不会更新以反映更改

在我的RDLC页面上,"报告数据"窗口显示一个自定义数据集,它将字段从中显示出来.我用一些额外的表修改了这个DataSet.但是,这些表没有显示,因此我无法选择它们用于表达式(在"表达式"窗口中,在"数据集"下,只有最初存在的表,而不是我添加的其他表).

刷新数据源没有任何作用,如果我右键单击它并选择"新数据集",我将无法选择父数据源(它不会出现在下拉列表中).我的意思是,如果数据源被称为"MyDataSet",并且在其下面是其他DataSet,如果我右键单击并转到"Add Dataset",它会弹出对话框,但"MyDataSet" 不在列表中可用的数据源,即使我特别说我想向该数据源添加数据表.其他现有数据表将其列在数据源下,但新数据源不会.

如何刷新数据源以便我可以在报告中访问这些新表?

rdlc

19
推荐指数
4
解决办法
4万
查看次数