如何规范具有相似列名的表?

时间:2019-07-16 14:05:35

标签: mysql database-normalization

我有一个这样的SQL表:

column(id, name, title, view1, view2, view3, view4);

table that lists columns

其中view1, view2,...是布尔字段,指示当选择了相应的viewX时,是否显示或隐藏带有name的特定表列。

例如,考虑一个具有诸如(time, pressure, efficiency, ...)之类的列名和各种数据的表(有关“列”的定义,请参见下文)

time  | pressure | efficiency
----------------------------
00:00 |    53.3  |    39%
00:01 |    53.3  |    39%
00:03 |    53.3  |    39%

我希望选择view1显示模式,其中view1仅显示time列。然后,我可能希望选择view2显示模式,在该模式下,我只想查看timepressure列。 view3仅显示timeefficiencyview4显示所有列名和数据(time, pressure, efficiency)

如何规范该表?我很难弄清楚该往哪个方向走。我首先需要对其进行规范化吗?

术语

要使用清晰的术语,我将使用单词“ column”来表示我的HTML表列用例,其中列是(时间,压力,效率等),单词“ field”表示SQL数据库字段。

P.S。我的答案似乎是在列表和组表之间创建一个 relation ,其中列包含值(时间,压力,效率),组包含值(view1,view2,view3等) 。基于关系,如果关系数据库表包含带有(视图X,字段名称Y)的行,则在选择视图X时将显示字段名称Y。我认为这是我的答案。

2 个答案:

答案 0 :(得分:2)

您可以创建一个包含布尔值的单独表:

first_table: column(id, name, title, sort_order);

second_table: column(id, first_table_id, view_no, shown);

此处shown列包含布尔值。

答案 1 :(得分:1)

my_table_1(id *,名称,标题,排序顺序);

my_table_2(my_table_1_id *,my_view *,状态);

* =(主键的组成部分)