我正在升级我刚才创建的支付管理系统.它目前有一个表可以接受每种付款方式.它仅限于能够支付一件事,这个升级是为了缓解.我一直在问我应该如何设计它的建议,我有以下工作的基本想法:
我的目标是:不要过于缓慢,尽可能地自我记录,并在保持其他目标的同时最大限度地提高灵活性.
由于每个表中的重复列,我不太喜欢1.它反映了继承基类的支付类型类,该基类为所有支付类型提供功能... ORM反向?
我倾向于最多2,因为它就像当前的设计一样"类型安全"和自我记录.但是,与1一样,要添加新的付款方式,我需要添加一个新表.
我不喜欢3因为它的"浪费的空间",并且不能立即清楚哪些列用于哪种支付类型.文档可以减轻这种痛苦,但我公司的内部工具没有一种有效的方法来存储/查找技术文档.
我给出的4个论点是,它可以减少在添加新的付款方式时需要更改数据库,但是由于缺乏明确性,它甚至比3更糟.目前,更改数据库不是问题,但如果我们决定开始让客户保留自己的数据库,它可能会成为一个后勤噩梦.
所以,我当然有偏见.有没有人有更好的想法?您认为哪种设计最合适?我应该根据什么标准做出决定?
是否无法引用名称中包含空格的程序集?我是否真的必须将程序集重命名为不包含空格?难道没有办法逃离这些空间吗?我找不到很多有这个问题的人,更不用说任何解决方案......
示例XAML:
<UserControl x:Class="SomeClass"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:Some.Namespace;assembly=Some Assembly With Spaces In The Name"
>
Run Code Online (Sandbox Code Playgroud)
这是编译器在您尝试执行此操作时提供的错误:
未知的构建错误,''clr-namespace:Some.Namespace; assembly =某些具有空格的程序集在名称中'映射URI无效.4号线位置2.'
放'或' 程序集名称周围没有帮助.
给定以下架构:
create table dbo.SomeTable
(
ID int primary key identity(1, 1),
SomeColumn varchar(50)
);
create index IX_SomeColumn on dbo.SomeTable (SomeColumn);
Run Code Online (Sandbox Code Playgroud)
并用一些数据填充它:
declare @i int = 1000;
while @i > 0 begin
set @i = @i - 1;
insert dbo.SomeTable (SomeColumn)
values (convert(varchar, @i))
end
Run Code Online (Sandbox Code Playgroud)
此查询执行索引搜索:
select ID
from dbo.SomeTable
where SomeColumn = '431'
Run Code Online (Sandbox Code Playgroud)
此查询执行索引扫描时:
select ID
from dbo.SomeTable
where case when SomeColumn = '431' then 1 else 0 end = 1
Run Code Online (Sandbox Code Playgroud)
有没有办法让后者(或类似的东西)执行索引搜索?
我问,因为我希望能够将其case when放入视图的选择列表并在where子句中使用它,但如果我无法让SQL Server执行索引,它将永远不会像原始格式一样好寻求.