我目前正在做一个有趣的项目。我已经开发了几个直接的数据库,但是这个当前的设置让我有点困惑,因为它有多个0:1的关系,我不完全确定我是否正确地设计了表和关系。我读过几个这样的问题,How to Create Multiple one to one's。然而,这些问题大多只是一个深层次的问题,尽管我认为基本问题仍然是一样的。
我的规格如下:
I. Restraint has Type
II. Type: Physical, Chemical, Mechanical
a. Physical has type
i. various Holds
b. Chemical has type
i. various Medicines
c. Mechanical has Type
i. Point has Type
1. various numbers
ii. Various devices限制:
1. Only one type per restraint
2. Only one type per Physical Restraint
3. Only one type per Chemical Restraint
4. Only one type per mechanical Restraint
i. If mechanical restraint type is Point only one Point Type per mechanical retraint这是我目前的设计

正如它所显示的,从约束到RestraintType,我有1:1,而从每个RestraintType表中,则有0:1。有了这个设计,所以我想,我可以更新任何描述或添加新的类型,而不必编辑数据库。除非添加了一种新的约束类型,该约束具有子类别。
有更好的方法来设计这个设置吗?在这个项目中有很多这样的关系,但是,如果我能很好地掌握这一点,剩下的应该是容易的。
编辑
下面是第二个设计模式,它浓缩了TypeRestraint查找。它使我的正常化神经刺痛,但它可能更有效?

编辑
这里有一个关于需要什么的更具体的观点。
一种约束发生了。约束可以是物理约束、化学约束或机械约束。这些是政府报告所规定的约束类型。
身体约束是以下几种方式之一:1人控制,2人控制,团队控制。
一种化学约束是下列之一:一种特定剂量的单一药物或一对特定剂量的药物。
机械约束是以下几种之一:手套、皮带、椅子、x点床约束(其中x可以是1-5之间的数字)、吐痰护罩和其他定期添加和拆卸的东西。
身体约束很少,如果曾经改变,因为它是相当直截了当。随着新药物的使用和旧药物的逐步淘汰,化学约束发生了变化。机械约束变化频繁。
约束只能是一种类型/子类型
如果说有一个1人的控制,2人的控制,团队的控制,那么一个化学的约束来使他们平静下来。这将是4个单独的限制,但这将进入项目的其他要求。
发布于 2015-01-06 21:00:24
好的,我看到了以下内容:只有两个表,其中一个有一个自连接和一个层次结构)
**Restraint**
RestraintID (PK)
RestraintTypeID (FK)
Description
Dose - only populated if RestraintTypeId is chemical
unsure if multiple chemicals are used if we need one for each or
if there is only a single "Dose" because the mixture is static.
**RestraintType** (Basically a hierarchical look-up)
(use recursive Common table expressions to query sub-levels if needed)
RestraintTypeID (PK)
ParentID (FK) to RestraintType.RestraintTypeId
Description
Active (Date)
Inactive (date)RestraintType中的数据看起来就像..。
1 NULL Physical
2 NULL Chemical
3 NULL Mechanical
4 1 1-Person Hold
5 1 2-Person Hold
6 1 Team Hold
7 2 Medicine Name
8 2 Medicine Name 2
9 2 Medicine Name 3
10 2 Medicine A & B
11 2 Medicine C & D
12 2 Medicine A & D
13 3 Gloves
14 3 Belt
15 3 Chair
16 3 1-Point Bed Restraint
17 3 2-Point Bed Restraint
18 3 3-Point Bed Restraint
19 3 4-Point Bed Restraint
20 3 5-Point Bed Restraint这确保每个约束只允许使用一种类型。对于所选的每种类型,只允许物理、化学和机械的一种子类型。它通过定义所有可用的点类型松散地满足#4。这可以通过使用另一个父、子关系的数据进行不同的管理,但我不认为有必要。日期定义了每个选项何时成为活动/非活动的,这样就可以维护历史值。
我相信这是简单的,因为它得到和满足所有的要求,同时保持第四范式。
设计变得简单得多,因为您可以在树视图中显示选项,并允许新的叶和元素更改,只需在幕后填充新的开始/结束日期。已开始的w/o结束日期是活动的,具有结束日期的已不可再进行选择。系统维护没有使用来自RestraintType的数据的约束历史被清除。除非所有相关的约束措施都是先清除的。(我不知道你要遵守什么留用规则,但我怀疑有一些)
如果您没有做过很多分层查询,那么这些查询可能会变得有点棘手。
我们只需要存储叶结果,因为每个约束只能有一个类型,每个类型只能有一个子/类型。因为我们知道每个类型/子类型关系,所以我们只需要记录最低级别,并且在需要时总是可以查找层次结构。
从UI的角度考虑
约束信息库信息..。
Restraint Used
(User selects from LOV of top level)
(System queries for next level list) and lets user select from a second LOV
(system queries for next level list) if exists, lets user select from a 3rd level (etc)
We store the last level Id of the Restraint used.
IF the restraint is a chemical as the top most node, then
the user must also define a "Dose" field that becomes active.我觉得你做错了:
您创建的子表都是不同类型的约束。他们都适合在一张桌子上的约束类型!您只需要一个层次结构来定义它们之间的关系。唯一的例外是“剂量”,但由于剂量与限制事件有关,它属于单独的约束明细表,也可以放在主表本身。单独的表将更符合缩放解决方案;但这两种方法都适用于当前定义的需求。
https://stackoverflow.com/questions/27803230
复制相似问题