【发布时间】:2018-03-01 03:11:14
【问题描述】:
我正在尝试设计的设备数据库中有以下情况。我目前有 3 个表格,详细说明了 3 种不同类型的设备和 1 个表格,以保持所有 3 个表格中的所有 ID 都是唯一的。如下:
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 列的主设备表会更好吗?或者让他们分开分组,记住以下几点:
- 管道、容器和储罐表中的所有字段都与主键具有 1:1 的关系,并且都依赖于主键。
参考 stackoverflow 社区上有关此主题的其他帖子...
MySQL: multiple tables or one table with many columns?
由于主键和列之间的 1:1 关系,这种情况的最佳设计似乎是一个包含许多列的大表,但我还不相信,希望其他人对此事的想法.
【问题讨论】:
-
我认为你不会得到明确的答案
-
@Strawberry 是什么让你这么说?
-
@Josh 没有明确的答案。这两种方法都行得通,但哪种方法更好取决于您的案例的很多细节。
标签: mysql database-design