40 lines
1.5 KiB
SQL
40 lines
1.5 KiB
SQL
ALTER TABLE components
|
|
ADD COLUMN first_seen_at TIMESTAMP NULL;
|
|
|
|
CREATE TABLE IF NOT EXISTS log_bundles (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
asset_id BIGINT NOT NULL,
|
|
collected_at TIMESTAMP NOT NULL,
|
|
content_hash CHAR(64) NOT NULL,
|
|
payload JSON NOT NULL,
|
|
source VARCHAR(255) NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_log_bundles_asset
|
|
FOREIGN KEY (asset_id) REFERENCES assets(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
UNIQUE KEY uniq_log_bundles_content_hash (content_hash)
|
|
);
|
|
|
|
CREATE TABLE IF NOT EXISTS observations (
|
|
id BIGINT AUTO_INCREMENT PRIMARY KEY,
|
|
log_bundle_id BIGINT NOT NULL,
|
|
asset_id BIGINT NOT NULL,
|
|
component_id BIGINT NOT NULL,
|
|
observed_at TIMESTAMP NOT NULL,
|
|
created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT fk_observations_log_bundle
|
|
FOREIGN KEY (log_bundle_id) REFERENCES log_bundles(id)
|
|
ON DELETE CASCADE ON UPDATE CASCADE,
|
|
CONSTRAINT fk_observations_asset
|
|
FOREIGN KEY (asset_id) REFERENCES assets(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
CONSTRAINT fk_observations_component
|
|
FOREIGN KEY (component_id) REFERENCES components(id)
|
|
ON DELETE RESTRICT ON UPDATE CASCADE,
|
|
UNIQUE KEY uniq_observations_bundle_component (log_bundle_id, component_id)
|
|
);
|
|
|
|
CREATE INDEX idx_observations_component ON observations(component_id);
|
|
CREATE INDEX idx_observations_asset ON observations(asset_id);
|
|
CREATE INDEX idx_observations_log_bundle ON observations(log_bundle_id);
|