- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我在一个项目中与两位顾问合作。问题是我们已经到了一个地步,他们都无法达成协议(protocol),而且每个人都提供了不同的方法。
问题是我们有一家商店有四个部门,我们想找到在同一个数据库中与所有部门合作的最佳方法。
每个部门销售不同的产品:汽车、船只、摩托艇和摩托车。
当每个部门插入或更新数据时,会有一些触发器被触发,因此不同的工作流程将开始,当添加新车时,需要检查某些要求以及汽车的详细信息与船完全不同。此外,关于数据,没有太多共同的字段,我想说到目前为止只有品牌、颜色、型号和年份,其他所有内容都是针对每个部门的,因为不同的产品以及它们如何使用它们。
一位顾问说:
为所有部门创建一个表,并使用一列来标识该行属于哪个部门,这样您将只有一个触发器,然后在触发器内您将调用每个部门所需的函数/方法记录类型。
原因:您只有一张表(包含 200 多个字段)和一个触发器,更易于维护。此外,如果您需要报告,您只需要查询一个表并根据记录类型进行过滤。如果您需要报告所有项目,则不需要进行多重联接。
顾问二说:
为每个部门创建一个表,并为每个表创建一个触发器。
原因:您将拥有更小的表(每个表大约 50 个字段)并且更灵活,并且您将它们全部分开。如果您想要报告,您需要加入表格,因为您想要包含来自不同地方的数据。
我看到了将所有内容都集中在一个地方的优势,但如果我想扩展或更改任何内容,我感觉我将随着数据的增长而创建一个野兽表。
另一方面,保持分离看起来更吸引人,但需要为每个不同的表设置所有内容。
您认为最好的方法是什么?
最佳答案
您可能应该听听二号顾问的意见。
事实是,所有设计都是权衡取舍。您需要评估每种方法的优缺点,并且需要考虑每种设计所带来的风险。
我已经这样做了很长时间,并且我看到一些钟摆在谈到数据库和软件最佳实践方面的“时尚”时来回摆动。
我想说现在流行的观点是关注点分离天生就是好的。这意味着您应该将每个部门的程序逻辑(触发代码)分开。这是有道理的,因为您的逻辑会因一种产品类型而异,因为它们大多具有不同的列。
第二点也很重要,因为您在交易系统基础上的利益应始终从第三范式开始(或更高,如有必要)。有时没有它你也可以逃脱,但是四种不同类型的对象具有 40 种或更多不同的属性,每种对象听起来不像是将所有内容都塞进一张表的好选择。例如,您如何跟踪哪些列属于哪种类型的产品?每种产品类型都有一个单独的表格,使您的支持程序员易于理解这一点,保持简洁明了 - 重要的是 - 很容易理解。
与一位顾问所说的相反,如果一个触发器是一大碗意大利面条,或者甚至是四个整洁、编写良好的子例程与 switch
类型语句。
现在,程序员喜欢简短的、原子的、单一用途的函数(在你的例子中是触发器)。
如果有足够多的通用数据和通用业务逻辑,以至于重复四次看起来很尴尬,那么也许您有一个很好的父类(super class)型/子类型设计候选者。
关于database - 系统设计: whether to normalize the departments or not,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43130416/
当我尝试感受 department 字段时,向我显示此错误。我不明白这个错误..请帮帮我 Cannot assign "'HR'": "Employee.department" must be a "
使用Collectors.groupingBy()我可以轻松获得Map> - 这给了我所有的Person属于Department的对象: allPersons.stream().collect(Col
I apologize if this is a duplicate question but it's kind of hard to fiddle through all the datepick
当我从 Controller 访问模型的数据时。我收到此错误 EntitySet 'Department' is based on type 'Admin' that has no keys defi
我收到此错误,我不知道原因:“部门”类已映射,但未包含在任何持久性单元中。 我有两个项目。一种是在我的 persistence.xml 中,标记之间只有两行: 我的类(class)是: packa
我在一个项目中与两位顾问合作。问题是我们已经到了一个地步,他们都无法达成协议(protocol),而且每个人都提供了不同的方法。 问题是我们有一家商店有四个部门,我们想找到在同一个数据库中与所有部门合
我意识到这个任务应该非常简单,但由于某种原因我有一段时间无法弄清楚。搜索类似问题也没有帮助。 所以,假设我有两个表:Documents 和 DepartmentsAndUsers。 --- Docum
是否可以在连接到 Active Directory 的 InfoPath 中创建一个下拉列表,并仅使用唯一的部门值(无重复值)填充列表 我需要这个用于 InfoPath,这样当用户输入数据时可以选择下
假设我们有两个表:1. 学生二、部门 Student table has 4 columns 1. id (int pk) 2. name (varchar) 3. percen
我尝试将Department和Mandator类坚持到hsqhldb,但它给出了此错误。 Exception Description: [class ch.printsoft.mailhouse.us
我正在尝试解决以下问题: class User user.department_id # Moderators can manage all Offers which share the
在我的 .rubocop.yml 中有一些用于禁用某些样式警察的配置。 Documentation: Enabled: false ClassAndModuleChildren: Enable
JSP PAGE Department listing --%>
Department = models.department.Department association_table = Table('template_department', models.ba
我需要禁用 HTTP 方法 OPTIONS 。我在 web.xml 中放置了以下配置。它在 tomcat 中工作(不允许 OPTIONS 方法)但是在错误时抛出以下错误部署
我正在为工厂的员工(用户)创建一个应用程序。该应用程序需要由用户登录。登录后,在下一页上,微调器值基于用户的部门。如果用户来自 IT 部门,则微调器将填充来自 IT 部门的所有“经理”姓名的列表。同样
我有一个 addEmployee 表单,需要我输入员工的详细信息,包括他的部门。对于部门,我使用下拉菜单。 我正在尝试填充员工的部门,但遇到了问题。 这是我的代码 员工类别 @Entity @Tabl
这可能吗?代码示例会很好。 最佳答案 实际上,问题是如何获取 .NET 3.5 (System.DirectoryServices.AccountManagement.)UserPrincipal 对
打印工资超过所有员工平均工资的每位员工的姓名他或她的部门。 emp(eid:整数,ename:字符串,年龄:整数,薪水:实数) works(eid:整数,did:整数,pct_time:整数) 部门(
我创建了一个脚本,使用 Import-Csv cmdlet 从 csv 中“批量添加”用户。我创建了一个循环来从每一行添加一个新的 Azure AD 用户。该公司没有现有的 AD,我们正在云端从头开始
我是一名优秀的程序员,十分优秀!