Đối với tôi, việc bạn đi một hàng hay EAV tùy thuộc vào cách bạn muốn tiêu thụ chúng.
Sức mạnh của EAV là dữ liệu mới có thể được thêm vào mà không thay đổi cấu trúc. Điều này có nghĩa là nếu bạn muốn một giá trị cấu hình mới, bạn chỉ cần thêm nó vào bảng và kéo nó ra nơi bạn muốn mã đó và bạn không cần thêm trường mới vào miền, lược đồ, ánh xạ, truy vấn DAL , Vân vân.
Lỗ hổng của nó là nó chỉ có cấu trúc chắc chắn nhất, đòi hỏi bạn phải xử lý dữ liệu một cách bi quan. Mọi việc sử dụng bất kỳ giá trị cấu hình nào đều phải mong muốn giá trị không xuất hiện hoặc không ở định dạng phù hợp và hoạt động tương ứng khi không. Giá trị cấu hình có thể không được phân tích cú pháp thành gấp đôi, hoặc int hoặc char. Nó có thể là null. có thể không có hàng cho giá trị nào cả. Các cách xoay quanh điều này thường yêu cầu một giá trị "mặc định" hợp lệ duy nhất tồn tại cho tất cả các giá trị cấu hình của một loại mã cụ thể ( cực kỳ hiếm; thường thì giá trị mặc định cũng không có vấn đề gì đối với việc tiêu thụ mã như không) giữ một từ điển được mã hóa cứng của các giá trị mặc định (phải thay đổi mỗi khi một cột mới được thêm vào, làm cho lợi thế chính của lưu trữ EAV trở nên khá tốt).
Một hàng rộng duy nhất là khá nhiều ngược lại. Bạn ánh xạ nó tới một phiên bản duy nhất của một đối tượng Cấu hình với trường / thuộc tính cho mọi giá trị cấu hình tồn tại. Bạn biết chính xác loại giá trị nào sẽ có trong thời gian biên dịch và bạn "không nhanh" trong DAL nếu cột cấu hình không tồn tại hoặc không có giá trị của loại phù hợp, cung cấp cho bạn một vị trí để bắt ngoại lệ dựa trên về vấn đề truy xuất / hydrat hóa cấu hình.
Nhược điểm chính là cần phải thay đổi cấu trúc cho mỗi giá trị mới; cột DB mới, cột mới trong DAL (ánh xạ hoặc truy vấn SQL / SP), cột miền mới, tất cả đều cần thiết để kiểm tra sử dụng đúng cách.
Tình huống thích hợp để sử dụng một trong hai điều này là tình huống trong đó các nhược điểm được giảm thiểu. Đối với tôi, hầu hết các tình huống để mã hóa cấu hình đã kêu gọi thực hiện một hàng đơn. Điều này chủ yếu là vì nếu bạn giới thiệu một giá trị cấu hình hoàn toàn mới chi phối hành vi của một số phần trong chương trình của bạn, bạn đã phải thay đổi mã để sử dụng giá trị cấu hình mới; Tại sao không bật lên đối tượng cấu hình và thêm giá trị được sử dụng?
Nói tóm lại, một lược đồ EAV để lưu trữ cấu hình thực sự không giải quyết được vấn đề mà nó có ý định giải quyết và hầu hết các cách giải quyết cho các vấn đề mà nó đưa ra đều vi phạm DRY.