Questions tagged «rules-and-constraints»

7
数据库约束发生了什么?
当我查看RDBMS的数据库模型时,通常会惊讶地发现几乎没有约束(除了PK / FK)。例如,百分比通常存储在类型的列中int(虽然tinyint会更合适),并且没有CHECK约束将值限制为0..100范围。同样在SE.SE上,建议检查约束的答案通常会收到注释,表明数据库是约束的错误位置。 当我询问不实施约束的决定时,团队成员会回答: 他们甚至都不知道自己喜欢的数据库中是否存在这样的功能。对于仅使用ORM的程序员而言,这是可以理解的,但是对于声称拥有给定RDBMS 5年以上经验的DBA而言,这是可以理解的。 或者它们在应用程序级别强制执行此类约束,并且在数据库中复制这些规则不是一个好主意,这违反了SSOT。 最近,我看到越来越多的项目甚至不使用外键。同样,我在SE.SE上看到了一些评论,这些评论表明用户不太在意引用完整性,让应用程序来处理它。 当询问团队有关不使用FK的选择时,他们说: 例如,当必须删除其他表中引用的元素时,它就是PITA。 NoSQL坚如磐石,那里没有外键。因此,我们在RDBMS中不需要它们。 就性能而言,这并不是什么大问题(上下文通常是在小型数据集上运行的小型Intranet Web应用程序,因此,实际上,即使索引也没有太大关系;没有人会介意给定查询的性能是否超过1.5 s到20毫秒)。 当我查看应用程序本身时,我系统地注意到了两种模式: 该应用程序会正确清理数据并在将其发送到数据库之前对其进行检查。例如,无法102通过应用程序将值存储为百分比。 该应用程序假定来自数据库的所有数据都是完全有效的。就是说,如果102以百分比来表示,某处某处将崩溃,或者仅将其按原样显示给用户,从而导致奇怪的情况。 尽管超过99%的查询是由单个应用程序完成的,但随着时间的流逝,脚本开始出现-要么在需要时手动运行脚本,要么执行cron作业。还可以手动对数据库本身执行某些数据操作。脚本和手动SQL查询都具有引入无效值的高风险。 这是我的问题: 没有关系约束而最终甚至没有外键的关系数据库建模的原因是什么? 就其价值而言,这个问题和我收到的答案(尤其是与Thomas Kilian进行的有趣的讨论)使我写了一篇有关数据库约束的结论文章。

3
日历/计划算法
我面临一个不确定的方法。我必须为员工生成日历,每个员工都有特定的工作限制(有些是个人的,有些是普通的) 我正在使用的是: 我有医生 每个医生每周必须工作5天。 每个医生每周必须工作1晚 与其他医生相比,每位医生必须工作等量的夜晚(或尽可能接近) 每个医生在周四晚上和周日晚上的工作量必须与其他医生相同(或尽可能接近) 有些医生不能在某些白天/夜晚工作(由用户输入) 一些医生想在某些白天/夜晚工作(由用户输入) 一些医生希望某些天/夜不工作(由用户输入) 有问题的用户是处理日历的人,我正在尝试构建一个解决方案,该解决方案将自动生成一个遵循所有约束的日历。解决的方法是对每个医生进行大设置输入“添加医生”和“添加约束”,然后输入“生成日历”按钮。对于用户而言,这确实是基本的。 我的问题 : 我不确定如何生成实际计划,我一直在阅读有关神经网络,遗传算法等的信息,它们似乎都是正确的解决方案,但实际上并非如此。 当我查看GA时,要让他们找到具有给定总体的解决方案(我的问题),但是起始总体必须已经服从给定的一组约束,然后可以对其进行优化。在那种情况下,我的起始人口已经是解决方案。我不需要对其进行“优化”。没关系,一个人连续工作3个星期一晚上,只要实际上是正确的,而其他人也工作相同的数量,就意味着其他人也将在某个时间点工作3个星期一晚上,这很好。这让我觉得GA的功能对我来说太“先进”了,因为我的问题已经从GA的起点解决了。 但是话又说回来,GA真的真的像是为此而生的,所以我可能无法正确理解它? 无论如何,因为我从未使用过GA(或神经网络,或任何种类的东西),所以我想确保在从事像这样的学习过程之前,我会选择正确的方法。 我的问题 : 对于像我这样的问题,您认为什么是好的方法/算法/技术?加油站?神经网络?还有其他完全不同的东西吗? 我全神贯注,并在需要时提供更多详细信息,但我想我已经很清楚了:)

6
科学代码是一个足以忽略普通编码标准的领域吗?
最近,我一直在努力思考以下事实。 一方面,对于所谓的“健康”,“干净”,“编写良好”等代码,有大量的编码准则和标准。参见似乎也在此处广泛讨论的“清洁代码”。规则示例:7行长方法和1或2级缩进。不遵循的代码将因可维护性差而死亡。 另一方面,我可以使用OpenCV,OpenCascade,VTK等。这是科学代码。他们有2页长的方法(我自己说),OpenCascade的方法或类分为10个文件(这里没有笑话),VTK有时也很混乱。然而,这些项目繁荣起来,得到了维护和广泛使用! 哪里有收获?我们是否被允许以一种可以正常工作的方式编写科学的,繁重的代码,并且我们可以对其进行维护?您是否为此类项目制定了一套单独的标准? 也许这是一个幼稚的问题,但是我似乎在一个编程空白中试图建立一套规则,该如何做和不做某事,这就是我在高中时被教导要工作的方式。自从我毕业以来,我对所要做的事情(主要是编程)几乎没有指导性的支持-没人会教。

4
从概念上讲,人们如何制定游戏的规则/约束(不是图形/物理)引擎
我想制作一个类似于自己选择冒险书籍的简单游戏。向玩家显示一个叙述文字,并从一系列可能性中选择其动作。反过来,这导致了新的叙述性文本无穷大。唯一要注意的是,根据先前的某些决定,可能性列表可能会有所不同。 乍一看,这听起来像是if-else语句的负载,因此暗示规则引擎将就位。但是,对我来说,这听起来也像是一台有限状态机。 我打算用Java或Groovy编写。目前,我对概念性问题更感兴趣,即应该如何在广义上进行操作(无论如何,人们如何实施国际象棋或纸牌游戏?),但也欢迎在特定库中提供一些建议。 显然,标题中的“游戏引擎”不是指碰撞检测或其他物理/图形力学,而是决定玩家给出的情况及其当前状态的选择的逻辑。


5
禁止在外部代码中调用任意函数/类
我曾遇到过一些案例,其中有必要限制外部库和框架的API的访问,以防止对系统造成负面影响。 例如,在SharePoint应用程序中,调用spList.Items.GetItemById以获取列表项似乎很自然,即使是在循环中,也可能没有意识到这会导致巨大的性能问题。 也可能是我们需要禁止使用SmtpClient,以迫使每个人都使用我们自己的类来发送电子邮件,以确保我们可以在测试环境中正确代理和模拟所有电子邮件。 除了在我们自己的代码中的某些特定位置之外,是否有任何可靠且合理直接的方法来实现对外部代码的这些约束?不必绝对在每种情况下都禁止访问这些方法/类,例如通过反射或仅通过某种禁用来禁止访问,而应该严格警告不要使用它们。优选地,如果可能/需要,迫使程序员积极采取措施来克服这些约束。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.