MySQL数据库澄清

时间:2018-05-18 19:45:17

标签: mysql sql database database-design

我是数据库设计的新手,我真的需要一些帮助来解决这个问题。

我有一个名为Processes的表,该表包含作业进程的所有名称。然后我有一个名为TrainingProcesses的表。该表只有Process1,Process2,Process3等名称,直到Process30。

每位员工最多可以培训30个流程。因此,对于他正在学习的员工第一个流程,我需要能够选择流程ID,将流程ID分配给他的配置文件中的Process1。 Process1不是特定的,它只是他们分配给他的任何工作流程。

你能告诉我如何将所有这些联系在一起吗?

  • EmployeeInformationTable

    • `Id``
    • `姓“
    • LastName
  • ProcessesTable

    • Id
    • Appm
    • Route H
    • RouteJ
  • TrainingProcessesTable

    • Process1
    • Process2
    • Process3
    • EmployeeInformationTable Id
    • ProcessTable Id

是否会像上面那样用简单的术语来完成?

2 个答案:

答案 0 :(得分:1)

您的桌面结构可行,并实现您期望的目标。那可以像上面的简单术语一样吗?是。

您可能还想考虑从TrainingProcessTable中删除“process1-30”列,并且只限制员工可以在应用程序逻辑内部而不是数据库中训练的最大进程数。这样做的好处是,如果您需要增加员工可以培训的流程数量,则无需更改数据库架构。

(EmployeeInformationTable)“Id”“FirstName”“LastName”

(ProcessesTable)“Id”“Appm”“Route H”“RouteJ”

(TrainingProcessesTable)“EmployeeInformationTable Id”“ProcessTable Id”

答案 1 :(得分:0)

希望将进程存储为单独的列。当你想做类似&#34之类的事情时,这只会引起令人头疼的问题;在所有其他事件之后添加一个新流程"。

  • EmployeeInformationTableId
  • ProcessTableId

您可能还需要更多信息:

  • 完成日期/时间
  • 完成度量标准(时间,质量)
  • 连续编号

如何将每位员工的长度限制为30?不幸的是,这有点棘手:

  1. 一种方法就是在应用程序层中执行此操作(在添加新行之前计算现有行数)。
  2. 第二种方法是将所有DML操作包装在存储过程中,并在那里编写逻辑。
  3. 第三种方法是使用触发器来阻止操作。
  4. 在实践中(1)是最简单的; (2)通常是我做的事情,(3)也许是最安全的,所以数据库保持完整性。