【问题标题】:Efficient MySQL database design for categorized data针对分类数据的高效 MySQL 数据库设计
【发布时间】:2013-09-25 08:39:35
【问题描述】:

我是 Web 开发一年级的学生,我正在寻找有关 MySQL 数据库设计的一些建议,以扩展我最近为一项任务创建的网站。

我目前正在开发的网站将用作模拟摄影设备的在线数据库。目前它允许用户搜索或使用过滤器来查找数据库中的特定摄像机。每个相机在网站上都有自己的页面,显示信息和图片等,理想情况下,我希望注册用户可以编辑这些信息,例如 wiki。

当前数据库设计:

目前,相机数据的数据库设计如下:

--> Current database design .png

您可以在图表中看到我有一个 'cameras' 表,其中包含所有带有基本信息的相机。然后,为了规范化和过滤的目的,我为现有的所有不同 “相机类型” 以及我的相机中的所有 “相机品牌”数据库所属。

现在我想做的是扩展我的数据库,以便能够存储每台相机的技术规格,例如镜头、闪光灯、快门速度等,但我意识到其中一些信息的相关性取决于 相机类型(例如紧凑型相机具有固定镜头,但单反相机具有可变镜头卡口),理想情况下,我只想在相机页面上显示与其相机类型相关的信息。

-- 数据库重新设计--

我当时的想法是,我可以将相机的信息存储在两个表中 - 将现有相机表与一般相机数据(如名称和发布年份)一起保存,但还可以在我的数据库中为每种相机类型(SLR 、TLR、compact、instant ...),每个都存储与该相机类型相关的技术规格,并使用 'cameras' 表中的 'camera_ID' 作为用于在两个表之间链接相机数据的外键。

虽然我不确定这是否是最佳解决方案 - 也许将相机数据分布在两个表上太混乱和过于复杂?我还想知道如果用户决定他们想要更改相机的类型,这是否会在以后引起问题,因为该相机记录必须移动到不同的表并将其现有数据合并到其中。 此外,如果某些相机类型具有相同的变量属性,我将在不同的相机类型表中复制列,我不确定这是否有效。

我能想到的唯一其他方法是保持现有设计,并在 'cameras' 表中添加更多列,以获取所有可能适用的技术规范,但是只是意味着它可能效率有点低,因为会有很多列可能与每个相机都不相关并且会保持空白(尽管这可能不是一个大问题??)

很抱歉,如果要吸收很多信息,但我有点难过!任何意见是极大的赞赏。在此先感谢:)

【问题讨论】:

    标签: mysql database-design schema normalization class-table-inheritance


    【解决方案1】:

    您正在描述一种继承形式。不幸的是,当前的关系数据库管理系统不直接支持继承,因此必须对其进行模拟 - 您提出的两种解决方案称为“每个类的表”和“每个(整个)层次结构的表”。1支持>

    如果您有大量的类(或预计将来需要添加新类),请选择前者2,否则您可以使用后者。

    有关继承(又名类别、子类型、子类化、泛化层次结构等)的更多信息,请查看ERwin Methods Guide,“子类型关系”部分。另外,看看this post


    1还有第三种策略,每个子类都用一张表来表示,但父类没有自己的表。 p>

    2 常用的字段和约束(例如外键)可以保留在父表中,因此不需要在子表中重复。 em>

    【讨论】:

    • 您在此处链接的很棒的指南-“子类型关系”非常符合我的想法,因此本阅读材料特别有用。感谢您的资源。
    猜你喜欢
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多