Các tùy chọn 1, 2 và 3 có chung một lỗ hổng rất nghiêm trọng:bạn phải sửa đổi lược đồ bảng bên dưới khi ai đó mơ thấy một thuộc tính mới. Trong trường hợp của Phương án 1, vấn đề phức tạp hơn bởi khả năng một loại thiết bị mới sẽ được giới thiệu. Bạn có chắc chắn rằng tập hợp các thuộc tính là cố định mọi lúc? Bạn sẽ vui như thế nào khi ngừng hoạt động hoặc nói với khách hàng rằng không, bạn không thể có thuộc tính mới?
Nếu bạn rất có thể thực hiện các truy vấn ngoài các thuộc tính thông thường, bạn có thể thử kết hợp 3 và 4, với dấu gạch ngang của 2 được phân chia theo loại thuộc tính thay vì loại trang bị, điều này có vẻ dễ bay hơi hơn nhiều. Tùy chọn 4, nếu tôi hiểu đúng, là phiên bản dạng bình thường của tùy chọn 1 giải quyết tất cả các vấn đề cố hữu của nó (độ thưa và giòn).
INVENTORY( id*, model, manufacturer, serial )
ATTRIBUTE( id*, name, type, description )
INVENTORY_FACT_STRING( inv_id*, attr_id*, value )
INVENTORY_FACT_NUMBER( inv_id*, attr_id*, value )
INVENTORY_FACT_LIST_STRING( inv_id*, attr_id*, ordinal*, value )
vv