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);
Я склонен не использовать столбцы идентификаторов для подобных вещей и указывать свой собственный идентификатор, который я сопоставляю непосредственно с константой 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's
- Вы можете просто использовать их как столбцы int и определять датчики в коде, как я делал с enum
- Я склонен делать и то и другое - определять перечисление для хорошей строгой типизации в коде и - создавать таблицу внешнего ключа для завершения моей схемы в базе данных.Это все еще стоит иметь по двум причинам;1) Когда вы пишете SQL-запросы в Management Studio или что-то в этом роде, и вы смотрите на свою таблицу engine_sensors и видите числа для типа датчика, вы можете присоединиться к вашей таблице FK, чтобы увидеть, какие датчики являются .Делает все немного проще
Наконец, если у вас есть таблица FK, она обеспечивает ссылочную целостность и ограничивает значения, которые вы можете ввести как типы датчиков, в соответствии с тем, что вы определили в таблице типов датчиков.
Надеюсь, это поможет.