[英]Should I have one master equipment table or multiple property tables?
我要设计的设备数据库中存在以下情况。 我目前有3张桌子,详细介绍3种不同类型的设备和1张桌子,以使所有ID在所有3张桌子中保持唯一。 如下:
CREATE TABLE EQUIPMENT
(
/*Primary key*/
EQUIPMENT_ID VARCHAR(30),
PRIMARY KEY (EQUIPMENT_ID)
);
CREATE TABLE PIPING
(
/*Primary key*/
EQUIPMENT_ID VARCHAR(30),
/*Generic Fields*/
STATUS VARCHAR(1),
INSPECTION_STATUS VARCHAR(1),
REMEDIATION_STATUS VARCHAR(1),
/*Specific properties for piping equipment*/
OUTSIDE_DIAMETER FLOAT,
WALL_THICKNESS FLOAT,
/*About another additional 50 specific fields*/
PRIMARY KEY (EQUIPMENT_ID),
FOREIGN KEY (EQUIPMENT_ID) REFERENCES EQUIPMENT(EQUIPMENT_ID)
);
CREATE TABLE VESSELS
(
/*Primary key*/
EQUIPMENT_ID VARCHAR(30),
/*Generic Fields*/
STATUS VARCHAR(1),
INSPECTION_STATUS VARCHAR(1),
REMEDIATION_STATUS VARCHAR(1),
/*Specific properties for vessel equipment*/
DISHED_END_THICKNESS FLOAT,
DESIGN_CODE VARCHAR(25),
/*About another additional 50 specific fields*/
PRIMARY KEY (EQUIPMENT_ID),
FOREIGN KEY (EQUIPMENT_ID) REFERENCES EQUIPMENT(EQUIPMENT_ID)
);
CREATE TABLE TANKS
(
/*Primary key*/
EQUIPMENT_ID VARCHAR(30),
/*Generic Fields*/
STATUS VARCHAR(1),
INSPECTION_STATUS VARCHAR(1),
REMEDIATION_STATUS VARCHAR(1),
/*Specific properties for tank equipment*/
FLOATING_ROOF_DIAMETER FLOAT,
FLOATING_ROOF_THICKNESS FLOAT,
/*About another additional 50 specific fields*/
PRIMARY KEY (EQUIPMENT_ID),
FOREIGN KEY (EQUIPMENT_ID) REFERENCES EQUIPMENT(EQUIPMENT_ID)
);
将所有这些表合并为一个具有150列的主设备表是否更好? 或将它们分开分组,并牢记以下几点:
通过引用关于这个主题的stackoverflow社区上的其他帖子...
看来,由于主键和列之间的1:1关系,针对这种情况的最佳设计将是一个包含许多列的大型表,但是我尚未确信,并且希望其他人对此有想法。
一些一般性的观察,太久了,无法发表评论:
EQUIPMENT_ID VARCHAR(30) -- There's almost certainly no good reason for this not to be an auto-incrementing integer
STATUS VARCHAR(1) -- CHAR(1) uses less memory and achieves the same thing.
OUTSIDE_DIAMETER FLOAT -- It seems more plausible to me that this would be a DECIMAL, and likewise for all the other FLOATs
最后,如果您决定切换到EAV模型,请考虑为不同的数据类型使用单独的表,因此所有DECIMAL类型的内容都放在一个表中,所有字符串类型的内容都放在另一个表中。
这里有一种相关的技术。 这称为类表继承。 还有更多的细节在这里 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.