Mysql 重组库存管理数据库(2到3个表;开发阶段)

Mysql 重组库存管理数据库(2到3个表;开发阶段),mysql,database,database-design,inventory,Mysql,Database,Database Design,Inventory,我正在开发一个数据库。我希望能有人帮助重组2到3个表,这样数据库就符合前3个标准格式;并且在将来使用和扩展/添加到时非常实用。我想现在就投入时间来减少以后的工作和困惑 序言 请注意,我既是一个努贝人,也是一个业余爱好者,尽管我有一定的经验、技能和丰富的热情 项目背景 我正在编写一个小型(尽管雄心勃勃!)web应用程序(使用PHP和AJAX创建MySQL数据库)。它本质上是一个库存管理系统,用于记录和查看每件设备的当前位置及其维护历史。如果相关,交易量将非常低(可能每天少于100笔,但有可能同时连

我正在开发一个数据库。我希望能有人帮助重组2到3个表,这样数据库就符合前3个标准格式;并且在将来使用和扩展/添加到时非常实用。我想现在就投入时间来减少以后的工作和困惑

序言

请注意,我既是一个努贝人,也是一个业余爱好者,尽管我有一定的经验、技能和丰富的热情

项目背景

我正在编写一个小型(尽管雄心勃勃!)web应用程序(使用PHP和AJAX创建MySQL数据库)。它本质上是一个库存管理系统,用于记录和查看每件设备的当前位置及其维护历史。如果相关,交易量将非常低(可能每天少于100笔,但有可能同时连接/操作)。行数也将非常低(可能几千行)

它将处理许多完全不同类别的设备,如自行车和灯具(随机举例)。每个设备单元的详细信息或规格将记录在数据库中。对于自行车而言,重要的规格可能是车架颜色,而对于车灯而言,则可能需要有关灯罩材料的信息

由于设备的类别有所以几乎没有共同之处,我认为存储信息最合理的方式是每类1个表。这样,每个类别都可以有特定于该类别的列

我打算将类别列表存储在一个单独的表中。每个类别都有一个该类别独有的id。(取决于最终设计,这可能作为查找表和/或运行查询的表发挥作用。)可能只有很少的类别(可能是10到20个),除非系统特别成功并扩展

自行车列表将保存在自行车表中。 每辆自行车都有一个该自行车独有的id(如0001号自行车)。 但相同的id将存在于灯表中(即灯0001)

在我的应用程序中,我希望用户(从下拉列表中)选择类别类型(例如自行车)。 然后输入对象的数字id(例如0001)。 这两个ID的组合是唯一标识对象的足够信息

图像:

当前表格设计

建议的附加表格

问题

我的直觉是,应该有一个“总括表”,它涵盖了每一件设备,无论它来自哪一个类别。这比天知道有多少个迷你表要简单得多。但当我试图构建它时,它似乎会打破各种范式。例如引入冗余、不一致的可能性、引用完整性问题等。它也开始看起来像一个域表

也许总体表应该是一个查询或视图,而不是一个实体

请看一下截图,并告诉我您的意见。谢谢

出于各种原因,如果可能的话,我宁愿使用代理键而不是自然键。理想情况下,我更喜欢将代理键放在单个列中

目前,bike(或lamp)表仅使用第一列作为主键。我是否应该将其扩展为包含
设备\u类别\u ID
列的复合键?然后将
Equipment\u Article
表放入连接这两列的视图中(对每个设备类别迭代)。可选地,
Bike\u ID
Lamp\u ID
列可以重命名为类似
Equipment\u Article\u ID
的通用列。这可能会使查询更简单,但是否存在失去特定性的风险?它仍然可以通过表名进行限定

说到冗余,当前lamp或bike表格中的
设备类别ID
似乎有点冗余(如果该表格中的每个项目/行在该列中都有相同的值)

这一切听起来还是一团糟!但这肯定是非常常见的问题,如在线电子商店,租赁店等。希望有人会说哦,老栗子!祝你好运!对不起,我的话不够简洁,但我想不出应该漏掉什么。如果有点健谈的话,大部分内容似乎都是相关的。提前谢谢


更新日期2014年3月27日(回复@ElliotSchmelliot)

你好,艾略特。
谢谢你的回复,并为我指出了正确的方向。我研究了OOP(Java),但不知道SQL中也可能有类似的东西。我很感兴趣地阅读了你发送的链接,网站/书籍的其余部分看起来是一个很好的资源

MySQL InnoDB支持专门化和泛化吗?

不幸的是,经过3个小时的搜索和阅读,我仍然找不到这个问题的答案。我搜索的关键词包括:MySQL+(继承| EER |专门化|泛化|父|子|类|子类)。我发现的唯一积极结果是:。它提到了MySQL工作台

设备类别的可能冗余(表3)
是和否。因为这是一个查找表,所以它当前有一个函数。但是,由于
自行车
表中的每个项目属于同一类别,因此列本身可能是多余的;如果是,则
设备类别
表可能是冗余的。。。除非其他地方有要求。我本来打算将其用作Web表单下拉列表的行源/选项列表。难道不是吗