Tôi mới ra trường đại học nên hầu hết sự quen thuộc với cơ sở dữ liệu quan hệ là từ khóa học cơ sở dữ liệu của tôi, nơi mọi thứ không có trong BCNF hoặc 3NF đều là một trò hề. Chắc chắn đó là một kết thúc cực kỳ, nhưng nhóm của tôi tại nơi làm việc thực sự dường như đưa nó đến kết thúc hoàn toàn ngược lại.
Trong các lược đồ db microservice của chúng tôi, các thực thể hiếm khi có nhiều hơn một bảng. Bất cứ điều gì bạn thường bình thường hóa vào một bảng khác sẽ được lưu trữ trong một cột json. Nếu sau đó phát hiện ra rằng một trong các thuộc tính trong json này cần được truy vấn, một cột mới sẽ được thêm vào và dữ liệu được lưu trữ ở cả hai vị trí (có, trong hai cột khác nhau trong cùng một bảng).
Trong rất nhiều trường hợp các cột json này chắc chắn có lợi thế. Nếu bạn không bao giờ cần truy vấn dữ liệu đó và nếu bạn không bao giờ phải thực hiện thay đổi đơn phương đối với dữ liệu đó (đó là điều bạn rõ ràng không thể dự đoán được), đó không phải là một ý tưởng tồi. Ngoài ra, nhiều dịch vụ của chúng tôi không thấy máy chủ hoặc được lưu trữ trên các máy có dung lượng ổ đĩa tối nghĩa cho những gì chúng cần, vì vậy sao chép dữ liệu không phải là vấn đề lớn. (Mặc dù một cái gì đó tôi thường muốn tránh ra khỏi triết lý)
Hiện tại chúng tôi đang xây dựng một dịch vụ khớp với các quy tắc dựa trên một tập hợp các điều kiện mà họ sở hữu và sau đó thực hiện một bộ hành động được liên kết với các quy tắc đó khi các quy tắc là đúng (ví dụ: tất cả các điều kiện là đúng). Nhóm phụ của tôi ngay lập tức xây dựng dịch vụ này tin rằng có một lợi ích đáng kể để bình thường hóa các hành động và điều kiện khỏi các quy tắc trong lược đồ. Rõ ràng các bảng này duy trì các mối quan hệ khóa ngoài với id quy tắc. Từ quan điểm của chúng tôi, chúng tôi có thể tránh trùng lặp dữ liệu theo các điều kiện cho phép chúng tôi đảm bảo rằng chúng chỉ được đánh giá một lần một lần và dễ dàng tìm thấy các điều kiện và quy tắc chúng tôi cần khi cần chúng mà không cần phải rút ra từng quy tắc và thực hiện tìm kiếm trong bộ nhớ.
Nói chuyện với một trong những kỹ sư chính của chúng tôi hôm nay, anh ấy đã cố gắng đẩy tôi ra xa khỏi lược đồ này. Cố gắng tranh luận theo mọi cách mà chúng ta không thực sự cần nó sẽ gây ra các vấn đề về hiệu suất trong tương lai, tham khảo một nguyên khối cũ mà chúng ta sở hữu đó là một trò hề thiết kế. Ông gọi những gì chúng ta đang làm là "cách cũ" và những chiếc bàn phẳng với json là "cách mới". Ông lập luận rằng ở những nơi tôi muốn nguyên tử, chúng ta không cần nó và thay vì truy vấn, chúng ta nên làm nhiều thứ hơn trong bộ nhớ. Đây là một nguyên tắc thiết kế mà nhiều dịch vụ của chúng tôi tuân theo. Chúng tôi không dự đoán rằng khối lượng dữ liệu của chúng tôi sẽ tăng lên đáng kể, điều này sẽ giúp truy vấn của chúng tôi nhanh chóng. Những gì chúng tôi dự đoán là rất nhiều thời gian dành cho việc đánh giá quy tắc và thực hiện các hành động.
Tôi hiểu rằng các cơ sở dữ liệu phi quan hệ đã trở nên phổ biến hơn trong những năm gần đây nhưng ngay cả khi tích cực tìm kiếm thông tin về ý nghĩa hiệu suất của các mối quan hệ khóa ngoài, tôi không thấy nhiều thông tin đưa ra trường hợp của mình. Tôi cho rằng họ có thể có xu hướng giới thiệu các giao dịch lớn có thể gây ra sự cố, nhưng đó dường như là một vấn đề độc lập với chính khóa ngoại.
Đây có phải là sự ngây thơ của tôi? Hay đây thực sự là thứ mà tôi và đội phụ của tôi đang thiếu? Tôi rõ ràng không cung cấp thông tin chi tiết về vấn đề của chúng tôi vì tôi không nhất thiết phải tìm giải pháp cho vấn đề đó. Cho rằng đó là một xu hướng phổ biến trong đội ngũ lớn hơn của chúng tôi, tôi thực sự tò mò nếu họ tiếp tục làm điều gì đó với điều này.