我正在开发一个数据库来存储我们想要用来标准化工作流程的信息。 该项目是一家工程公司,我要存储的信息是硬件模块的IO数据。
我制作了一个“主”表,其中包含需要填写的所有“必填”字段,并且我想将其余数据存储在单独的表中。到目前为止一切顺利。
现在我们面临挑战: 在“主”表中,我定义信号是模拟信号还是数字信号(还有更多,但我们暂时保留它)。模拟数据和数字数据具有非常不同的数据集,因此我想将它们存储在自己的表中,即模拟值表和数字值表。 主表将有一个字段说明该信号是模拟信号还是数字信号(信号类型)。但是,我无法弄清楚如何根据 SignalType 字段的值建立表之间的关系。 我有一个名为 TagName 的 FK 字段,这是我们正在使用的唯一编程名称,但与两个表建立 1:1 关系感觉是错误的,因为 TagName 键只会出现在其中一个表中。
希望有人能帮忙
如前所述,我尝试制作与 TagName 字段具有 1:1 关系的表格。但这并没有创造出我想要发生的事情。我想要基于 SignalType 字段的值的每行表之间的“条件关系”。但我不知道该怎么做。 我确实研究了交叉引用表,但我无法理解在这种情况下如何实现它。
数据建模中的解决方案称为继承...您的数据模型的设计并没有显示这一点...
那么从技术上来说,在 SQL 中你必须具备:
以 SQL 为例:
CREATE TABLE T_BASIC_IO_INFO_BIO
(BIO_ID INT IDENTITY PRIMARY KEY,
...)
CREATE TABLE T_IO_INFO_ANALOG_IIA
(BIO_ID INT PRIMARY KEY REFERENCES T_BASIC_IO_INFO_BIO (BIO_ID),
...)
CREATE TABLE T_IO_INFO_DIGITAL_IID
(BIO_ID INT PRIMARY KEY REFERENCES T_BASIC_IO_INFO_BIO (BIO_ID),
...)
CREATE TRIGGER E_IU_IIA
ON T_IO_INFO_ANALOG_IIA
AFTER INSERT, UPDATE
AS
...
IF EXISTS(SELECT *
FROM T_IO_INFO_ANALOG_IIA AS A
JOIN NEW
ON A.BIO_ID = NEW.BIO_ID
JOIN T_IO_INFO_DIGITAL_IID AS D
ON A.BIO_ID = D.BIO_ID)
--> raise an error to rollback
...
CREATE TRIGGER E_IU_IID
ON T_IO_INFO_DIGITAL_IID
AFTER INSERT, UPDATE
AS
...
IF EXISTS(SELECT *
FROM T_IO_INFO_DIGITAL_IID AS D
JOIN NEW
ON D.BIO_ID = NEW.BIO_ID
JOIN T_IO_INFO_ANALOG_IIA AS A
ON A.BIO_ID = D.BIO_ID)
--> raise an error to rollback
...