Không, lưu trữ FK trong một mảng không bao giờ là một ý tưởng hay cho các bảng mục đích chung. Trước hết, có một thực tế mà bạn đã đề cập ở trên:Các ràng buộc khóa ngoại cho các phần tử mảng chưa được triển khai (chưa). Chỉ điều này sẽ làm mất ý tưởng.
Đã có một nỗ lực triển khai tính năng cho Postgres 9.3 đã bị dừng lại do các vấn đề nghiêm trọng về hiệu suất. Xem chủ đề này trên pgsql-hacker.
Ngoài ra, trong khi hiệu suất đọc có thể được cải thiện với các mảng cho các trường hợp sử dụng nhất định, hiệu suất ghi sẽ giảm mạnh. Hãy nghĩ về nó:Để chèn, cập nhật hoặc xóa một phần tử đơn lẻ khỏi một mảng dài, bây giờ bạn phải viết một phiên bản hàng mới với toàn bộ mảng cho mọi phần tử được thay đổi. Và tôi cũng thấy sự cạnh tranh về khóa nghiêm trọng ở phía trước.
Nếu bảng của bạn là chỉ đọc , ý tưởng bắt đầu có ý nghĩa hơn. Nhưng sau đó, tôi sẽ xem xét một chế độ xem cụ thể hóa với các mảng không chuẩn hóa ở trên cùng của một triển khai nhiều đến nhiều được chuẩn hóa:
Trong khi ở đó, MV có thể bao gồm tất cả các bảng nối và tạo ra một bảng phẳng để có hiệu suất đọc tốt hơn (đối với các trường hợp sử dụng điển hình). Bằng cách này, bạn nhận được tính toàn vẹn của tham chiếu và hiệu suất đọc (và ghi) tốt - với chi phí đầu tư và bộ nhớ bổ sung để quản lý MV.