不确定我知道正确的术语,但是关于融合关系是否有任何错误/无效?
我经常要查询的事情:
答案 0 :(得分:2)
<强>正常化强> 我们通过定义谓词(由列参数化的语句模板)和表(每个包含从其谓词生成真实语句的行)开始设计,足以描述根据出现的所有业务情况>业务规则。然后我们规范化。信息建模方法有意地生成具有一定规范化设计的谓词/表格。
我们通常只能解决您的问题,因为您没有提供有关您的设计的足够信息:相关谓词&amp;表和功能依赖性(FD),候选密钥(CK),连接依赖性(JD),外键(FK)和&amp;限制数据库状态或限制业务情况的规则的其他约束。您应该学习并使用一些信息建模方法和规范化程序到5NF。 (从哪个人可能想要归一化到较低的NF。)
FK图 FK“路由连接两个表之间的信息”&amp; “收敛”(无论你的意思是什么或听说过)都是无关紧要的。 FK告诉DBMS强制表格的某些子行必须出现在某些其他子行中作为谓词&amp;的结果。商业规则。典型的DBMS不必要地支持定向FK循环,但这与找到最佳初始设计无关。
照片强> 根据您的问题,您可能想要的表格是:
-- photo PHOTO was taken by camera CAMERA at event EVENT
Shot(photo, camera, event)
据推测,每个可能存在的FD中有一个CK / PK {photo}。
<强>相机/活动强> 要记录摄像机具有某些内在属性(事件分析类似),您可以添加:
-- camera CAMERA is a model MODEL and ...
CameraEtc(camera, model, ...)
否则,无论是否在可以添加的事件中拍摄照片,都要记录相机:
-- CAMERA identifies a camera
Camera(camera)
据推测,Photo中的相机值必须出现在您添加的表的相机列中。所以会有照片{相机}参考它的FK。
但是,如果您的唯一相机是在某些事件中拍摄了一些照片的相机,那么select * from Camera
= select camera from Shot
则您不需要相机。
相机事件分配 要记录照相机被指定用于某个事件,无论是否在该事件中拍摄了某张照片,您都可以添加:
-- camera CAMERA is assigned for use at event EVENT
Assigned(camera, event)
鉴于Assigned,大概是相机&amp;必须分配一个镜头的事件。所以Shot相机事件对必须出现在Assigned中。所以Shot有一个FK {camera,event}引用Assigned。
Shot的另一种选择是:
-- photo PHOTO was taken by camera CAMERA
ShotCamera(photo, camera)
-- photo PHOTO was taken at event EVENT
ShotEvent(photo, event)
因为select * from Shot
= select * from ShotCamera natural join ShotEvent
。但相应的约束表明相机和相机。必须分配照片的事件,即ShotCamera&amp;的自然连接。 ShotEvent在Assigned中有一个FK引用{camera,event},即Shot FK所说的内容。由于这些表和(特别是在SQL中)约束都比较复杂,我们更喜欢Shot设计。
增加谓词/表格 要记录分配的属性,您可以使用附加参数/列进行扩充分配。这是因为这样的属性对于每个赋值都是单值的,因此这样的列对于每个相机事件对是单值的,因此{camera,event}也是增强表的CK,并且它发生了归一化进程不建议分解扩充表。
同样适用于增强Photo,CK为{photo}。
但是要记录相机的属性而不管它们是否已分配,您应该为其他参数/列添加增强型相机。因为增强的Assigned是有问题的:
-- camera CAMERA is a model MODEL and ... and is assigned for use at event EVENT
AssignedEtc(camera, model, ..., event)
select * from AssignedEtc
= select * from CameraEtc natural join Assigned
总是如此。这是因为表的自然连接保持满足其谓词连接的行。即AssignedEtc的谓词是CameraEtc的谓词 AND ed with Assigned的谓词:“相机CAMERA是模型MODEL和...... 和相机CAMERA被分配用于事件EVENT”。但是,与通过标准化解决的CameraEtc + Assigned设计相比,AssignedEtc设计具有某些缺点:每当给定的相机出现时,它必须具有相同的模型,......值。规范化AssignedEtc设计会导致像CameraEtc + Assigned这样的设计。