Cài đặt ứng dụng trong cơ sở dữ liệu


8

Trước đây, tôi đã lưu trữ tất cả các cài đặt chung và các mục cấu hình, chẳng hạn như: tiêu đề ứng dụng tùy chỉnh, địa chỉ nhà, phiên bản, gỡ lỗi, v.v. tất cả trong một tệp "settings.php" mà tôi sẽ đưa vào tất cả các tập lệnh của mình.

Tôi giả định rằng nên có một bảng cơ sở dữ liệu được thiết lập cụ thể cho các cài đặt ứng dụng như thế này, theo cách đó bạn không cần phải chỉnh sửa tệp php để điều chỉnh hoặc thay đổi. Tuy nhiên, tôi có một chút thận trọng về cách tôi sẽ thiết lập điều này.

Có hai lựa chọn tôi đã xem xét:

  1. Tôi có một bảng có một hàng, nhiều cột, làm cho mỗi cột trở thành một giá trị biến duy nhất.
  2. Tôi có hai cột với tên đầu tiên là tên biến và cột thứ hai là giá trị của biến.

Bất kỳ đề xuất hoặc những điều tôi nên nhận thức từ quan điểm thiết kế cơ sở dữ liệu?

Câu trả lời:


9

Trong Tùy chọn 1, bạn được đảm bảo một hàng duy nhất (nếu bạn nhớ chèn trực tiếp một hàng).

  • Nếu bạn muốn giới thiệu một cài đặt mới, bạn sẽ phải thực hiện ALTER TABLE để thêm cột cần thiết.
  • Nếu bạn muốn xóa cài đặt cũ, bạn sẽ phải thực hiện ALTER TABLE để xóa cột không cần thiết.
  • Bạn sẽ phải giả sử sự hiện diện của cột trong mã. Mặt khác, bạn có thể phải truy vấn information_schema.columns để đảm bảo cột đại diện cho cài đặt cần thiết có tồn tại trong bảng hay không. Truy vấn bảng information_schema.columns cực kỳ tệ khi có hàng tá (hoặc thậm chí hàng trăm) bảng InnoDB trong môi trường ghi nặng. Điều đó có khả năng có thể khóa thông tin_schema.column không liên tục cho đến khi nó được đọc miễn phí.
  • Bạn nên đảm bảo số lượng bảng luôn là một (1).

Trong lựa chọn 2, mọi thứ có một chút khác biệt

  • Nếu bạn muốn giới thiệu một cài đặt mới, bạn sẽ phải thực hiện một INSERT để thêm cài đặt cần thiết dưới dạng một hàng.
  • Nếu bạn muốn xóa một cài đặt cũ, bạn sẽ phải thực hiện XÓA để xóa cài đặt cần thiết dưới dạng một hàng.
  • Bạn phải truy vấn bảng theo tên biến để xem tùy chọn có mặt không.
  • Không có giới hạn ảo để thêm hoặc xóa cài đặt khỏi bảng

Những lựa chọn này có điểm gì chung?

  • Nếu bạn để các cài đặt cũ một mình, điều này có thể cho phép các phiên bản cũ của mã ứng dụng sử dụng các cài đặt cũ, nhưng điều đó chỉ giới thiệu sự lộn xộn vào bảng.
  • Công cụ lưu trữ phải là InnoDB để cho phép nhiều người đọc từ đó.

Cá nhân, tôi sẽ chọn Tùy chọn 2 vì việc tạo cài đặt mới, tùy chọn xóa cài đặt cũ và kiểm tra các cài đặt hiện có sẽ xảy ra tại một bảng. Phương thức truy xuất cài đặt tất cả sẽ giống nhau. Trong Tùy chọn 1, bạn sẽ phải truy vấn information_schema.columns cộng với các giả định nhất định về bảng cài đặt. Chuỗi các sự kiện để truy xuất cài đặt có thể thay đổi từ phiên bản mã sang phiên bản mã.


ahh vâng, tôi đã không cân nhắc thực tế rằng nó cũng cần phải truy cập information_schema.columns. Bạn đưa ra một lập luận rất mạnh mẽ cho Lựa chọn 2. Cảm ơn bạn nhiều!
CenterOrbit
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.