我是新的数据库设计,我真的需要一些帮助弄清楚这个。
我有一个名为processs的表,这个表包含所有作业进程的名称。然后我有一个表叫trainingprocesss。此表的名称仅为process1、process2、process3,依此类推,直至process30。
每个员工最多可以培训30个流程。因此,对于员工正在学习的第一个流程,我需要能够选择一个流程id,将该流程id分配给他的概要文件中的process1。process1不是什么特别的东西,它只是他们分配给他的任何工作流程。
你能告诉我怎么把这些联系起来吗? EmployeeInformationTable
身份证``
“名字”
LastName ProcessesTable
Id Appm
Route H RouteJ
TrainingProcessesTable Process1
Process2 Process3
EmployeeInformationTable Id ProcessTable Id
会像上面那样简单地说吗?
2条答案
按热度按时间vhmi4jdf1#
您的表结构,因为它是工作的,并达到您想要的目标。那么,能不能像上面这些简单的术语一样呢?对。
您可能还需要考虑从trainingprocesstable中删除“process1-30”列,并将员工可以培训的最大进程数限制在应用程序逻辑内部,而不是数据库内部。这样做的好处是,如果您需要增加员工可以培训的进程数,您就不必更改数据库模式。
(employeeinformationtable)“id”“firstname”“lastname”
(processestable)“id”“appm”“route h”“routej”
(TrainingProcessTable)“employeeinformationtable id”“进程表id”
ac1kyiln2#
您不希望将进程存储为单独的列。当你想做“在所有其他进程之后添加一个新进程”这样的事情时,这只会让你头疼。
EmployeeInformationTableId
ProcessTableId
你可能还需要更多的信息:完成日期/时间
完成指标(时间、质量)
序列号
等。
你如何将每位员工的长度限制为30人?不幸的是,这有点棘手:
一种方法是只在应用程序层执行(在添加新行之前计算现有行的数量)。
第二种方法是将所有dml操作 Package 在存储过程中,并在其中编写逻辑。
第三种方法是使用触发器来阻止操作。
在实践中(1)是最简单的(2) 通常是我做的,而且(3)可能是最安全的,所以数据库保持了完整性。