【问题标题】:efficient database design inheritance高效的数据库设计继承
【发布时间】:2013-05-14 10:33:31
【问题描述】:

我想设计一个有 2 个类别的数据库。 每个类别有 2 个子类别,但它们与其他类别非常相似,例如:

预防性设备维护:

  • cat1
    • id、设备、型号、系列、配件、日期、成本、状态
  • 猫 2
    • id、设备、型号、系列、配件、日期、成本、状态

矫正设备维护

  • cat1
    • id、新设备、旧设备、借用设备、描述
  • 猫 2
    • id、新设备、型号、系列、配件、日期、成本、旧设备、借用设备、描述

因此,您可以看到收集的预防性设备维护数据之间的唯一区别是猫(cat1 或 cat2)。 为了解决这个问题,我想制作一张像

CREATE TABLE `preventive_e`(
      id          INTEGER  NOT NULL PRIMARY KEY,
      equipment   VARCHAR(25) ,
      cat         VARCHAR(4) ,      
      CONSTRAINT `uc_Info_E` UNIQUE (`id`)           
);
INSERT INTO `preventive_e` values (1,'nintendo','cat1');
INSERT INTO `preventive_e` values (2,'psp','cat2');

现在纠正它会是一样的,但是它们不是相同的字段,它们几乎是相同的字段,如果是 cat1 我只想存储一些字段,但如果是 cat 2 我想存储相同的字段但是更多字段

有没有办法使用继承或其他东西?扩展字段但能够添加更多特定字段?查询会是什么样子。

sqlfiddle

【问题讨论】:

  • 为什么要将只包含 4 个字符字符串的字段声明为 varchar(50)? char(4) 似乎更合适。
  • 我发布了一个答案,但再次阅读了这个问题,我们需要更多关于什么与什么相关的描述。装备正好有2类?设备有维修吗?预防性的,纠正性的,两者兼而有之?一个类别由 id、新设备、旧设备、借用设备、描述来描述?或者那是示例类别的列表?
  • 您实际上是在尝试规范化您的表格,这是一件好事,但很难按照您的要求进行操作。

标签: mysql sql database


【解决方案1】:

为什么不将该表称为equipment_maint 之类的通用表,并有一个列作为其使用的标志。

Fiddle

CREATE TABLE `equipment_maint`(
  id          INTEGER  NOT NULL PRIMARY KEY,
  equipment   VARCHAR(25)  ,
  cat         VARCHAR(50) ,  
  type       varchar(20),  /* usage on type of maintenance */
  CONSTRAINT `uc_Info_E` UNIQUE (`id`)           
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-11-19
    • 1970-01-01
    • 2016-12-04
    • 1970-01-01
    • 2011-12-15
    • 2010-10-07
    • 2015-11-03
    • 1970-01-01
    相关资源
    最近更新 更多