Я хочу представить устройство, у которого есть светодиодный экран, куча датчиков и некоторые другие свойства. Дело в том, что я знаю, что в будущем нам может понадобиться хранить различные устройства, поэтому я не решаюсь о том, как представлять в базе данных.Решение по дизайну для mysql
Мой первый подход был стол так:
CREATE TABLE device_name (
id STRING(32) NOT NULL UNIQUE,
led00 STRING(6) DEFAUTL "000000",...,
sensor_name_status BOOL,
sensor_name_data REAL,
....
owner STRING(32) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (owner) REFERENCES users(id));
Таким образом, я представляю владельца и идентификатор устройства с md5 маркера в качестве идентификатора и у меня есть одно поле для каждого СИД и датчика.
Другой подход:
CREATE TABLE devices (
id STRING(32) NOT NULL UNIQUE,
owner STRING(32) NOT NULL,
PRIMARY KEY (id),
FOREIGN KEY (owner) REFERENCES users(id));
CREATE TABLE sensors (
device_id STRING(32) NOT NULL,
status BOOL,
data REAL,
type INT(3) NOT NULL,
PRIMARY KEY (device_id,type)
FOREIGN KEY (device_id) REFERENCES devices(id));
CREATE TABLE leds (
device_id STRING(32) NOT NULL,
value STRING(6) NOT NULL,
x INT(3) NOT NULL,
y INT(3) NOT NULL,
PRIMARY KEY (device_id,x,y),
FOREIGN KEY (device_id) REFERENCES (devices));
Второй вариант кажется концептуально лучшее дело для меня, потому что это позволяет мне вставить новые устройства с последовательным интерфейсом доступа, но я беспокоюсь о производительности, если у меня так же, как 1-3, возможно, будет лучше иметь одну таблицу устройств для каждого из них.
Что вы думаете? Любая критика приветствуется :)
Варианта 2 является вашим единственным реальным вариантом, если вам есть «куча датчиков» - он будет более ремонтопригодным и более экстенсивным - с точки зрения скорости - ну, если вы не говорите о миллионах предметов, это не будет проблемой - JOIN очень эффективен! –