【发布时间】: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