我的雇主,一家小型办公用品公司,正在转换供应商,我正在查看他们的电子内容,以提出一个强大的数据库架构; 我们以前的模式几乎没有任何想法就被抛在了一起,而且它几乎导致了一个无法忍受的数据模型,其中包含损坏的,不一致的信息.
新供应商的数据比旧供应商的数据要好得多,但他们的数据就是我称之为超标准化的数据.例如,他们的产品类别结构有5个级别:Master Department,Department,Class,Subclass,Product Block.此外,产品块内容具有产品的长描述,搜索术语和图像名称(这个想法是产品块包含产品和所有变体 - 例如特定笔可能有黑色,蓝色或红色墨水;所有这些项目基本上是相同的,所以它们适用于单个产品块).在我给出的数据中,这表示为产品表(我说"表",但它是带有数据的平面文件),其中引用了产品块的唯一ID.
我试图提出一个强大的模式来容纳我提供的数据,因为我需要相对较快地加载它,他们给我的数据似乎与他们的数据类型不匹配在他们的样本网站(http://www.iteminfo.com)上提供演示.无论如何,我不打算重复使用它们的表示结构,所以这是一个没有实际意义的点,但我正在浏览网站以获得有关如何构建事物的一些想法.
我不确定的是我是否应该以这种格式保存数据,或者例如使用自引用关系将Master/Department/Class/Subclass合并到单个"Categories"表中,并将其链接到a产品块(产品块应该分开,因为它不是"类别"本身,而是一组给定类别的相关产品).目前,产品块表引用了子类表,因此如果将它们合并在一起,这将更改为"category_id".
我可能会创建一个电子商务店面,利用Ruby on Rails中的这些数据(或者说这是我的计划,无论如何)所以我试图避免以后遇到障碍或者有一个膨胀的应用程序 - 也许我我给了它太多的想法,但我宁愿安全而不是抱歉; 我们以前的数据真是一团糟,由于数据不一致和不准确,使公司损失了数万美元.此外,我将通过确保我的数据库是健壮的并强制执行约束(我计划在应用程序级别执行它)来稍微摆脱Rails约定,所以这也是我需要考虑的事情.
你会如何解决这样的情况?请记住,我已经将数据加载到模拟表结构的平面文件中(我有文档说明哪些列是哪些列以及设置了哪些引用); 我正在试图决定是否应该像现在这样将它们保持正常化,或者我是否应该寻求巩固; 我需要知道每个方法将如何影响我使用Rails对网站进行编程的方式,因为如果我进行整合,单个表中基本上会有4个"级别"的类别,但这似乎比单独的表更易于管理每个级别,因为除了Subclass(直接链接到产品块),他们不这样做除了显示下一级别的类别之外的任何东西.对于处理这样的数据的"最佳"方式我总是感到茫然 - 我知道"正常化直到它受到伤害,然后反正规化直到它起作用"这句话但是我从来没有真正实现过它.
sql normalizing database-design ruby-on-rails denormalization
我正在设计一个托管的软件即服务应用程序,就像37Signal的Highrise产品的高度专业化版本.在这种情况下,SEO是一个非问题,是否值得实施"漂亮的URL"而不是使用数字ID(例如,customers/john-smith而不是customers/1234)?我注意到很多网络应用程序都不打扰它们,除非它们提供真正的价值(例如电子商务应用程序,博客 - 需要通过搜索引擎找到SEO的东西)
我已经很久没有使用DataReaders了(我更喜欢使用ORM)但是我被迫开始工作.我拉回行,检查HasRows是否属实; 此时调试并检查阅读器显示我的数据存在.
现在问题出现了:我打电话的那一刻reader.Read(),试图扩展结果说"枚举没有产生任何结果"或其他什么,我得到"当没有数据存在时无效的读取尝试".错误.如果我不调用Read(),我会得到相同的东西(这是默认情况,因为DataReader在第一个记录之前启动).
我不记得处理这个的正确方法; 当我检查时,数据就在那里HasRows,但是在我打电话之后或之后尝试从中读取数据时,数据就消失了Read,这没有任何意义,好像我不打电话Read,读者应该仍然在第一个记录之前,并且如果设置的属性设置为在第一个记录(SingleRow?我忘记了它的名称)处启动它,那么我应该能够在不调用Read的情况下读取行,但是两种方式似乎都移过包含数据的行.
我忘记了什么?代码相当简单:
TemplateFile file = null;
using (DbDataReader reader = ExecuteDataReaderProc("GetTemplateByID", idParam))
{
if (reader.HasRows) // reader has data at this point - verified with debugger
{
reader.Read(); // loses data at this point if I call Read()
template = new TemplateFile
{
FileName = Convert.ToString(reader["FileName"]) // whether or not I call
// Read, says no data here …Run Code Online (Sandbox Code Playgroud) 长话短说,几十页都没有使用母版页.对于一个新模块,我创建了一个带有菜单控件的母版页(菜单控件已经存在),所以我可以在我正在创建的六个左右页面中获得相同的外观.由于内容页面使用母版页,因此Menu控件的名称已更改为ct100_Menu1而不是仅仅Menu1.除了有人决定使用控件的确切名称来设置菜单样式的精确ID(例如CSS Menu1 a { /* stuff */ })之外,这不会是一个问题.因此,菜单无法正常呈现,因为我使用的是母版,而不仅仅是复制代码.
我无法更改菜单文件中的CSS代码,因为它可能会破坏某些东西,所以有什么方法可以更改控件,以便不显示那些麻烦ct100而无需添加任何工具或创建我自己的自定义控件(因为我可以不要替换Menu.ascx控件,虽然我可以修改它以添加CSS类)或者是我唯一的选择是不使用母版页或将菜单CSS复制到另一个文件并正确设置?
感觉有点卡在岩石和硬地之间,因为代码是故意编写的,所以你不能使用母版页,没有人回去改变它.
我正在尝试根据特定方案将单元测试类划分为逻辑分组.但是,我需要有一个TestFixtureSetUp,TestFixtureTearDown这将运行整个测试.基本上我需要做这样的事情:
[TestFixture]
class Tests {
private Foo _foo; // some disposable resource
[TestFixtureSetUp]
public void Setup() {
_foo = new Foo("VALUE");
}
[TestFixture]
public class Given_some_scenario {
[Test]
public void foo_should_do_something_interesting() {
_foo.DoSomethingInteresting();
Assert.IsTrue(_foo.DidSomethingInteresting);
}
}
[TestFixtureTearDown]
public void Teardown() {
_foo.Close(); // free up
}
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我得到一个NullReferenceException,_foo大概是因为在执行内部类之前调用了TearDown.
如何实现预期的效果(测试范围)?是否有一个扩展或NUnit的东西,我可以使用,这将有所帮助?我宁愿坚持使用NUnit,也不要使用像SpecFlow这样的东西.
如果我们需要将本地计算机连接到开发甚至生产数据库,我们将使用带有数据库连接字符串的本地配置文件。我们调用此文件ConnectionStrings.local.config并将其包含在我们的 C# 项目中,以便我们可以轻松编辑它。
我不希望在使用发布 Web 工具时包含此文件,因为我们将使用配置转换来替换每个服务器上真实数据源的连接字符串属性。
我修改了我的.csproj文件如下:
排除
但 ConnectionStrings.local.config 文件在发布后仍然显示在该文件夹中。
如何从部署中删除它而不从 Visual Studio 中排除该文件?
在Ruby on Rails的短暂(偶尔持续)工作之后,我正在阅读.NET的内容.我想知道在为新应用程序选择ORM时LINQ仍然是一个选择,或者我是否应该学习类似NHibernate的东西,而这似乎仍然很强大.我知道Linq基本上被实体框架所包含,但是当我尝试使用EF(这是前一段时间)时,我发现它太沉重而且"鼠标驱动"(即很多人都在与设计师一起玩).我在NHibernate上观看了一些简短的截屏视频,我确实喜欢它所强调的关注点的分离,以及你的模型可以保持清洁的想法.
LINQ的语法是相当不错的,虽然,但它不是一个真正的ORM,我不希望看到学习的东西,基本上是过时的时候我能学到东西是正在使用或将要使用(EF和/或NHibernate的,例如).
所以,是的LINQ还是什么,应该使用一个应用程序被认为是(让我们假设一个中度复杂的东西,不是一个简单的应用程序,而不是一个非常艰巨的任务,围绕复杂的像37Signal的高层一个基于Web的应用程序),或者是有什么相反,更值得一看?
我希望为我的应用程序提供订阅者的部分内容是显示其客户位置的地图,以及获取路线的选项(想法是他们可以轻松地从一个地方获取路线而不是复制/粘贴并转到谷歌地图或Mapquest或其中任何一个).但据我所知,谷歌地图将要求我付费使用他们的API,因为我的应用程序只对付费订阅者可见.我已经联系了他们的销售部门,试着看多少,但说实话,任何金额都太多了,因为我的创业公司是自助式的,我几乎没有任何资金.
这让我看到了替代方案,因为我不打算付费使用映射API.在可用的地图中,您认为哪个地图和方向最可靠?我正在考虑Bing地图(以前的Live Maps),因为看起来我将使用ASP.NET MVC作为我的首选平台(嘿,我有另外两年的BizSpark会员资格 - 我不妨使用它!)但是我没有检查他们的服务条款,看他们是否有类似于谷歌地图的附加条件,因为如果地图只对付费客户可见,则需要特殊许可.
编辑:我想我要问的是,是否有任何地图服务不会收取手臂和腿在付费,受密码保护的网站上使用他们的地图服务?我希望将地图集成作为我产品的一个主要功能,但我们是一家创业公司,所以没有钱可以获得类似的类似的昂贵许可证.
对于像这样的情况,我找不到任何东西.我有一个模型,它具有如此定义的命名范围:
class Customer < ActiveRecord::Base
# ...
named_scope :active_customers, :conditions => { :active => true }
end
Run Code Online (Sandbox Code Playgroud)
我试图在我的Controller规范中将其删除:
# spec/customers_controller_spec.rb
describe CustomersController do
before(:each) do
Customer.stub_chain(:active_customers).and_return(@customers = mock([Customer]))
end
it "should retrieve a list of all customers" do
get :index
response.should be_success
Customer.should_receive(:active_customers).and_return(@customers)
end
end
Run Code Online (Sandbox Code Playgroud)
这不起作用并且失败,说客户期望active_customers但是收到它0次.在我的实际控制器中,我有索引操作@customers = Customer.active_customers.为了让这个工作,我错过了什么?可悲的是,我发现编写代码比编写测试/规范更容易,并且写了因为我知道规范描述的内容,而不是如何告诉RSpec我想做什么.
我正在处理来自MySQL数据库的一些序列化数据,我需要使用Ruby对其进行反序列化(序列化数据用于为数据库查询构建WHERE子句).PHP有unserialize()将其转换为数组的方法; 什么是Ruby相当于此?
有问题的数据看起来像这样,如果有任何帮助:
a:2:{s:5:"Lists";a:1:{i:0;s:2:"11";}s:5:"Rules";a:1:{i:0;a:3:{s:4:"type";s:5:"group";s:9:"connector";s:3:"and";s:5:"rules";a:1:{i:0;a:3:{s:4:"type";s:4:"rule";s:9:"connector";s:3:"and";s:5:"rules";a:3:{s:8:"ruleName";s:2:"21";s:12:"ruleOperator";s:10:"isnotempty";s:10:"ruleValues";a:1:{i:0;s:0:"";}}}}}}}
c# ×3
.net ×1
asp.net ×1
asp.net-3.5 ×1
bing-maps ×1
css ×1
friendly-url ×1
google-maps ×1
linq-to-sql ×1
maps ×1
master-pages ×1
nhibernate ×1
normalizing ×1
nunit ×1
orm ×1
php ×1
rspec ×1
ruby ×1
seo ×1
sql ×1
unit-testing ×1