繁体   English   中英

如何在SQL中表示“组”?

[英]How to represent “groups” in SQL?

我只是出于业余爱好编写代码,但始终尝试学习“适当的”工作方式。 关于SQL,我是一个新手,因此我想提供更多背景知识,以防万一我可能完全错误地解决该问题。

首先,我将列出一个可以与之交互的“开关”。 每个开关的名称将是唯一的。 DB将需要知道如何与它们交互(什么接口:LPT,GPIO等),以及该接口的“引脚”是什么。 DB不在乎开关当前是打开还是关闭。 因此,我计划有下表:

switches
--------
<<pk>> name
interface
pin

现在,如果最终用户想要关闭“ Light1”或“ Light2”,则可以在不知道开关类型或接线位置的情况下关闭它们。

我的问题在哪里,我还希望能够创建“组”以一次打开/关闭多个相关开关。 每个组将具有唯一的名称(最好在单个交换机的任何名称中也唯一)。 开关可能以零个,一组或多个组存在。 但是,我的理解是,将“列表”存储在SQL表的列中是一种不良做法。

组的一个示例(以照明灯为例)是一个名为“ Lights”的组,其中包含每个照明开关的名称。 我可能还有一个名为“ KitchenLights”的组,其中包含厨房中每个电灯开关的名称。 预期如果新添加或删除了相关的开关,则将手动维护列表。

我在想的一种方法是在“开关”表中添加更多列,以描述开关(轻型)和“位置”(厨房)的“类型”,但是类型组将被“硬编码”。 “ 如果后来我决定要按它们所在的楼层对它们进行分组,则将是结构更改以添加新列和代码更改。

那么,如何解决这个问题有什么建议呢?

谢谢!

您可以尝试以下方法:

create table switches
(name varchar(100) primary key,
 interface int,
 pin varchar(100));


Create table groups
( group_id int primary key,
group_name varchar (100));

Create table sub_group
( group_id int, 
switch_id varchar(100) ,
constraint groups_fk FOREIGN KEY (group_id) references groups(group_id),
constraint switches_fk FOREIGN KEY (switch_id ) references switches(name));
insert into switches values 
('Light1',123,'xyz'),
('Light2',456,'abcd'),
('Light3',789,'testpin');
insert into groups values
(1,'Group1'),
(2,'Group2'),
(3,'Group3');
insert into sub_group values 
( 1,'Light1'),(1,'Light2'),
(2,'Light1'),(2,'Light3');

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM