Keep one product record
Store name, canonical URL, platform model and core facts once. Use join tables for categories, capabilities and comparison membership.
Relationship example
CREATE TABLE comparison_members (
comparison_id bigint NOT NULL,
product_id bigint NOT NULL,
sort_order smallint NOT NULL,
PRIMARY KEY (comparison_id, product_id)
);
Add foreign keys and indexes appropriate to your engine and schema.
Separate facts from opinions
Product version and supported deployment are structured facts. The choice rationale is editorial content that should explicitly state its use case and assumptions.
Provenance
Store the official source, last manual verification date and reviewer state for volatile features and prices. Prefer clearly unknown fields over fabricated values.
Publishing rule
A machine-suggested update must not silently rewrite the public listing or comparisons before validation.
Examples are starting points, not production security audits. Confirm dependencies, versions and pricing using linked vendor documentation.