根据Anith Sen 应该避免的五个简单数据库设计错误,使用通用查找表来存储实体的可能状态是一个常见的错误.
编辑+答案: Anith文章中的数字没有很好的标注 - 我认为图1和图2都是糟糕设计的例子,而图2是好的设计.P,在那里担心了一会儿.
我将在下面提出我的问题以供参考.
"你失去了确保准确数据的手段;约束.通过将不同的实体组合到一个表中,你没有声明方法来约束某个类别的值."
限制价值如何失去准确性?"您必须将每种数据类型表示为具有此类通用查找表的字符串."
如果我想表示另一种数据类型,我可以在其查找表中添加一列."你致力于坚强和随后的复杂性."
怎么样?第四,也是最后,您面临着物理实现问题.
我不明白为什么.
我不同意给出的大多数理由,并希望对我的错误进行一些客观的批评?逻辑.
引用维修服务中的工作示例,其中包含许多可能具有自然流动的可能状态,让我们采取一个JobStatus表格:
可以说,这些状态中的一些可以标准化为表格Couriered Items,Completed Jobs并且Quotes(具有待定/接受/拒绝状态),但这感觉就像不必要的模式复杂化.
另一个常见示例是OrderStatus限制订单状态的表:
状态标题和描述在一个地方进行编辑,并且易于作为带有外键的下拉列表用于动态数据应用程序.这对我来说过去很有用.如果业务规则规定了新订单状态的创建,我可以将其添加到OrderStatus表中,而无需重建我的代码.
为什么这是一个不好的做法?
编辑:我在我的问题中加入了Anith的理由,并试图保持客观.
-
以下是我的想法:
% g/All Claims\t 0/3d
Run Code Online (Sandbox Code Playgroud)
但这不起作用(在这种模式下乘以动作似乎是无效的语法).我最终得到了以下序列:
qq
/All Claims\t 0
3dd
q
10000@q
Run Code Online (Sandbox Code Playgroud)
这个宏观组合很好.我只是好奇是否有适合的东西并且适合第一个例子的上下文.为了进一步扩展,我正在寻找能够用第一行替换3d的东西,并使用相同的命令,或者适当地引用宏.
开始在现有代码库上使用PC-Lint(恐惧和恐惧).
它抱怨的一件事是:
class IBatch
{
public:
virtual void StartBatch() =0;
virtual int CommitBatch() =0;
};
Run Code Online (Sandbox Code Playgroud)
当另一个类派生出来时,它就像一个接口一样使用它
base class 'IBatch' has no destructor
Run Code Online (Sandbox Code Playgroud)
所以,问题是:当您创建如上所述的接口类时,您是否始终包含虚拟析构函数?为什么?(是样式还是编码错误?)
编辑:应该说我不希望或希望IBatch 的用户破坏,他们只是一个服务的消费者,通过这个接口到一些外部实现类(如果这会有所作为)
我有一个分支(让我们称之为B)忽略某个文件,在某些其他分支(例如分支A)中不会忽略该文件.当我从分支B切换到分支A,然后再次返回到B时,该文件已被删除.
这是正常的吗?我可以看到它会如何发生,在分支B认为它不存在的意义上,分支A认为它是,所以当我回到B时它"整理它".但它有点烦人.
有什么建议?
我正在http://www.sthurlow.com/python/lesson08/上在线阅读教程,我相信我理解类在python中是如何工作的,至少在某种程度上,但是当我运行这段代码时:
class Shape:
def __init__(self,x,y):
self.x = x
self.y = y
description = "This shape has not been described yet"
author = "Nobody has claimed to make this shape yet"
def area(self):
return self.x * self.y
def perimeter(self):
return 2 * self.x + 2 * self.y
def describe(self,text):
self.description = text
def authorName(self,text):
self.author = text
def scaleSize(self,scale):
self.x = self.x * scale
self.y = self.y * scale
Run Code Online (Sandbox Code Playgroud)
我收到此错误:
Traceback (most recent call last):
File "Y:/python/Shape.py", line 1, …Run Code Online (Sandbox Code Playgroud) 如果您遵循DM课程,使用哪本教科书?
我了解数据挖掘:实用机器学习工具和技术(第二版)和本次调查.你有效地使用了什么?
有没有办法检索运行当前python脚本的可执行文件的路径(从python脚本中)?
我知道struts2默认配置会修剪从表单中获取的所有字符串.
例如:
我打字
" whatever "在表格和提交,我会得到
"whatever"该字符串已被自动修剪
spring mvc也有这个功能吗?谢谢.
我正在尝试重新编译应用程序,在visual studio 2005和visual studio 2008中使用警告级别4进行编译.由于错误(见下文)来自std:tr1,我认为存在一些冲突,但不确定如何修理.我的第一个想法是删除所有对boost的引用,但是后来我得到一个错误,它无法找到格式方法.所以这里有一个错误:(不确定它意味着什么)任何想法,建议,解决方案?谢谢!
编辑:刚开始时我看到一条消息:未知的编译器版本 - 请运行配置测试并报告结果
EDIT2:我认为导致此错误的一段代码:(更改为保护无辜)EDIT3:我更新了错误消息,即添加了更多...但是我得到了更多错误消息,例如这一个..所以有一个更大的问题/问题.
!m_someMap.insert( std::make_pair( "somestring", SomeClass::isTrue ) ).second
....
.....
inline bool isTrue ( const IDog & dog ) { return s.IsDogTrue(); }
1>c:\program files (x86)\microsoft visual studio 10.0\vc\include\type_traits(197): error C2752: 'std::tr1::_Remove_reference<_Ty>' : more than one partial specialization matches the template argument list
1> with
1> [
1> _Ty=bool (__cdecl &)(const IDog &)
1> ]
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(356): could be 'std::tr1::_Remove_reference<_Ty&&>'
1> c:\program files (x86)\microsoft visual studio 10.0\vc\include\xtr1common(350): or …Run Code Online (Sandbox Code Playgroud) c++ ×3
python ×2
boost ×1
class ×1
data-mining ×1
git ×1
ip-address ×1
linux ×1
spring ×1
spring-mvc ×1
vim ×1