Như đã báo cáo trong DatabaseSchema_pgsql :: changeField và trong db_change_field () :
LƯU Ý QUAN TRỌNG: Để duy trì tính di động của cơ sở dữ liệu, bạn phải tạo lại rõ ràng tất cả các chỉ mục và khóa chính đang sử dụng trường đã thay đổi.
Điều đó có nghĩa là bạn phải loại bỏ tất cả các khóa và chỉ mục bị ảnh hưởng bằng db_drop_ {primary_key, unique_key, index} () trước khi gọi db_change_field (). Để tạo lại các khóa và chỉ mục, hãy chuyển các định nghĩa khóa dưới dạng đối số $ new_keys tùy chọn trực tiếp cho db_change_field ().
Ví dụ: giả sử bạn có:
$schema['foo'] = array(
'fields' => array(
'bar' => array('type' => 'int', 'not null' => TRUE)
),
'primary key' => array('bar')
);
và bạn muốn thay đổi foo.bar thành kiểu nối tiếp, để nó làm khóa chính. Trình tự đúng là:
db_drop_primary_key($ret, 'foo');
db_change_field($ret, 'foo', 'bar', 'bar',
array('type' => 'serial', 'not null' => TRUE),
array('primary key' => array('bar'))
);
Mã tương tự được báo cáo cho Drupal 7.
Hãy nhớ rằng, theo kinh nghiệm của tôi, bạn không thể xóa khóa chính sử dụng trường nối tiếp. Trên Drupal 6, tôi đã gặp lỗi tất cả các lần tôi đã thử làm điều đó; Tôi đã không thử điều đó trên Drupal 7.
Ngoài ra, tôi không biết bất kỳ vấn đề nào khác mà bạn có thể gặp phải với các chỉ mục cơ sở dữ liệu.
Về việc thêm một chỉ mục vào bảng cơ sở dữ liệu được tạo từ một mô-đun khác, tôi không khuyên bạn nên làm điều đó, bởi vì:
- Một mô-đun không bỏ chỉ mục cho một trường đang được thay đổi, nếu chính mô-đun đó không tạo ra chỉ mục đó. Mô-đun sẽ không thể làm điều đó vì nó không biết tên của chỉ mục.
- Sửa đổi bảng cơ sở dữ liệu được tạo bởi một mô-đun khác không bao giờ là một ý tưởng hay, ngay cả trong trường hợp mô-đun là mô-đun lõi. Nếu có một mô-đun khác thay đổi cùng một bảng, làm thế nào các mô-đun có thể xử lý bất kỳ xung đột nào chúng có với nhau hoặc với các thay đổi mà mô-đun lõi sẽ áp dụng cho cơ sở dữ liệu của chính nó?
Nếu bảng cơ sở dữ liệu đang được tạo từ một mô-đun khác (mô-đun lõi hoặc mô-đun của bên thứ ba), tôi sẽ đề nghị mở một yêu cầu tính năng cho mô-đun, cung cấp trường hợp sử dụng để sử dụng chỉ mục mới; nếu có bất kỳ vấn đề về hiệu năng, việc thêm một chỉ mục có thể là điều mong muốn.
Nếu bạn định thêm một chỉ mục vào một bảng được tạo từ một mô-đun khác vào trang web của riêng bạn, thì hãy chuẩn bị cho mọi thay đổi bạn cần thực hiện cho mô-đun tùy chỉnh của mình mỗi khi mô-đun được cập nhật và trước khi bạn cài đặt nó vào trang web của riêng bạn .
Chính bạn là người có thể quyết định xem công việc làm thêm có xứng đáng với hiệu suất bạn nhận được hay không. Cá nhân, tôi không nghĩ rằng nó là giá trị, mặc dù.