mysql - MySQL在两个表之间连接信息的两条路由是否违反规范化规则?

标签 mysql database-normalization

我不确定我是否知道正确的术语,但有没有什么错误/无效的关于有融合的关系?
我将经常询问的问题:
哪些摄像机在活动中
哪些照片来自活动
哪些照片来自照相机
对于#3,如果我也可以将图像直接连接到相机工作台,则我宁愿避免双重连接直通事件。我也不能合并这些表,因为在实际应用程序中有更多的信息。
这违反了正常化吗?
有没有更好的方法来组织这些信息?
注意:“事件”表最好称为cam_事件表,将未看到的事件信息表(1-n)和相机信息表(1-n)连接起来。
enter image description here

最佳答案

标准化
我们首先定义谓词(由列参数化的语句模板)和表(每个表包含从谓词生成真正语句的行),这些谓词足以描述根据业务规则可能出现的所有业务情况。然后我们正常化。信息建模方法有意生成具有某种规范化设计的谓词/表。
我们通常只能解决您的问题,因为您没有提供有关设计的足够信息:相关谓词和表以及限制数据库状态或限制业务情况的规则的功能依赖项(fd)、候选键(ck)、连接依赖项(JDs)、外键(FKs)和其他约束。您应该学习并使用一些5NF的信息建模方法和规范化过程。(从中可以将非规范化为较低的NF。)
FK图FK“连接两个表之间的信息的路由”和“会聚”(无论您是什么意思或听说过它们)都是不相关的。FK告诉DBMS强制表的某些子行必须作为谓词和业务规则的结果出现在某些其他子行中。典型的dbms不必要地不支持定向FK循环,但这与寻找最佳的初始设计无关。
照片
从你的问题来看,你可能想要一张桌子:

-- photo PHOTO was taken by camera CAMERA at event EVENT
Shot(photo, camera, event)

假设每个FDs中有一个CK/PK{photo}可能保存在其中。
摄像机/活动
要记录相机具有某些固有属性(事件分析类似),可以添加:
-- camera CAMERA is a model MODEL and ...
CameraEtc(camera, model, ...)

否则,无论摄像机是否在活动中拍摄过照片,都可以添加:
-- CAMERA identifies a camera
Camera(camera)

可能照片中的相机值必须出现在添加的表的相机列中。所以照片{camera}中会有一个FK引用它。
但如果你的相机是在某个活动中拍摄的,那么你就不需要相机了。
摄像机事件分配
要记录已分配用于某个活动的相机,而不管该相机是否在该活动中拍摄了照片,您可以添加:
-- camera CAMERA is assigned for use at event EVENT
Assigned(camera, event)

如果已分配,则可能必须分配快照的相机和事件。因此,镜头-摄影机事件对必须出现在“指定”中。所以Shot指定了FK{camera,event}引用。
射击的另一种选择是:
-- photo PHOTO was taken by camera CAMERA
ShotCamera(photo, camera)
-- photo PHOTO was taken at event EVENT
ShotEvent(photo, event)

因为select * from Camera=select camera from Shot。但相应的约束条件是必须指定照片的camera&event,也就是说ShotCamera&ShotEvent的自然连接中有一个FK引用了assigned中的{camera,event},即Shot FK所说的。由于这些表和(特别是在SQL中)约束都比较复杂,我们更喜欢快照设计。
扩充谓词/表
若要记录工作分配的属性,可以使用附加参数/列对扩展的工作分配进行分配。这是因为这样的属性在每次赋值时都是单值的,所以这样的列在每个camera事件对中都是单值的,所以{camera,event}也是扩充表的CK,并且正常化过程并不建议分解扩充表。
增强照片也一样,CK是{Photo}。
但是,要记录相机的属性,不管是否分配了它们,您应该为其他参数/列使用一个增强的相机。因为增广赋值有问题:
-- camera CAMERA is a model MODEL and ... and is assigned for use at event EVENT
AssignedEtc(camera, model, ..., event)

总是这样。这是因为表的自然连接持有满足其谓词连接的行。Ie AssignedEtc的谓词是cameraec的谓词,并与Assigned的谓词一起:“camera camera是一个模型模型,并且。。。摄像机被指定在活动中使用。但与标准化处理的cameraec+指定设计相比,AssignedEtc设计有一些缺点:每次给定的相机出现时,它都必须具有相同的型号。。。价值观。而规范化AssignedEtc设计会导致类似cameraec+Assigned的设计。

关于mysql - MySQL在两个表之间连接信息的两条路由是否违反规范化规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38278556/

相关文章:

mysql - UTC 数据库中 IST 数据按小时求和值

MySQL,删除重复项

sql-server - 将 JSON 字符串转换为 SQL Server 中的规范化架构

php - codeigniter 忽略部分搜索查询

C# MySQL 错误 “Column count doesn' t 第 1 行匹配值计数”

python - 当我尝试在 Mac mojave 10.14 中安装 MySQL-python 包时出现错误 : command 'cc' failed with exit status 1.

mysql - 如果可以使用 WHERE,为什么还需要使用外键?

数据库设计 : Likes table

database - 在数据库列中存储分隔列表真的那么糟糕吗?

mysql - 将查询转换为使用连接