Np。现在我明白你的意思了(我想)。
如果你问的是什么我认为你问的是不是,你可能想要对传感器表使用 FK 并列出传感器。这通常是我会做的......
CREATE TABLE [SensorType](
[Id] [int] NOT NULL,
[Type] [int] NOT NULL,
[DisplayWarningTo] [int] NOT NULL,
[Description] [nvarchar](100) NULL,
CONSTRAINT [PK_SensorType_Id] PRIMARY KEY (Id),
CONSTRAINT [FK_SensorType_WarningReceivor] FOREIGN KEY (DisplayWarningTo) REFERENCES WarningReceivor(Id)
);
CREATE TABLE [WarningReceiver](
[Id] [int] NOT NULL,
[Receiver] [int] NOT NULL,
CONSTRAINT [PK_WarningReceiver_Id] PRIMARY KEY (Id)
);
------
INSERT INTO WarningReceiver(Id, Type) VALUES (1, 'Mechanic');
INSERT INTO WarningReceiver(Id, Type) VALUES (2, 'Driver');
INSERT INTO SensorType(Id, Type, DisplayWarningTo) VALUES (1, 'Rear sensor', 2);
INSERT INTO SensorType(Id, Type, DisplayWarningTo) VALUES (2, 'Test sensor', 1);
INSERT INTO SensorType(Id, Type, DisplayWarningTo) VALUES (3, 'Production sensor', 2);
我倾向于不在这样的“类型”上使用标识列,而是指定我自己的 id,我将其直接映射到 C# 枚举常量,例如
public enum SensorType
{
RearSensor = 1,
TestSensor = 2,
ProductionSensor = 3
}
然后在您的代码中,当您从数据库中提取引擎传感器时,您可以与您的枚举进行比较。例如
var engine_sensor = // get engine sensor from db.
if (engine_sensor == (int)SensorType.RearSensor)
{
// do something
}
else if (engine_sensor == (int)SensorType.TestSensor)
{
// display something to mechanic or whatever
}
我真的不知道你的应用程序域是什么,如果这没有意义,很抱歉。
所以总结几点并尝试回答您的问题;
- 是的,我确实认为你最好用 FK 的
- 您可以将它们作为 int 列并在代码中定义传感器,就像我对枚举所做的那样
- 我倾向于两者都做
--- 为代码中的强类型定义枚举和
---创建一个外键表来完成我在数据库中的架构。出于两个原因,仍然值得拥有它; 1) 当在 management studio 或其他东西中编写 sql 查询并查看 engine_sensors 表并查看传感器类型的数字时,您可以加入 FK 表以查看传感器 是什么。让事情变得更简单
最后,如果您有一个 FK 表,它会强制引用完整性并将您可以作为传感器类型输入的值限制为您在传感器类型表中定义的值。
希望这会有所帮助。