Quyết định độ dài của các trường shapefile?


8

Trong công việc của tôi đã thừa hưởng một số shapefile có nguồn gốc từ MapInfo mà tôi đang đưa vào một dự án mới trong QGIS. Tôi có cơ hội thay đổi tên cột, thêm và trừ các cột và vì không có quá nhiều dữ liệu trong đó nên tôi có thể bắt đầu lại từ đầu và điều chỉnh độ dài trường.

Tôi nhận thấy rằng một số độ dài trường lớn hơn rất nhiều so với mức cần thiết và tôi nhớ từ quá trình tạo cơ sở dữ liệu trong quá khứ 20 năm trước, hoặc vì vậy, tốt nhất là giữ độ dài trường không dài hơn mức cần thiết tiết kiệm 'không gian', để nâng cao hiệu quả.

Điều này vẫn còn mong muốn hay chiều dài trường không còn quan trọng nữa?


Nó phụ thuộc vào định dạng bạn đang sử dụng.
bugmenot123

1
Độ dài trường có lẽ nên được giữ ở mức "không dài hơn mức cần thiết" theo định nghĩa bạn không cần bất cứ điều gì lâu hơn. Tất nhiên, nó phụ thuộc vào những gì bạn đang chụp để xác định độ dài bạn "cần".
DMusketeer

3
IMO cách thực hành tốt nhất quan trọng nhất là ngừng sử dụng shapefiles nếu có thể.
alphabetasoup

Câu trả lời:


12

Câu trả lời phụ thuộc vào định dạng dữ liệu. Các tệp dBase-III +, được sử dụng trong các shapefile cho các thuộc tính, có độ rộng cố định, do đó, việc xác định một cột Trin là văn bản có chiều rộng 254 sử dụng 254 byte. Tệ hơn nữa, dBase có độ rộng bản ghi tối đa 4000 byte, do đó, 249 bị lãng phí trên trường năm ký tự không có sẵn cho các trường khác (trong đó có tối đa 100 hoặc 255, tùy thuộc vào người thực hiện tiêu chuẩn). Các giới hạn cũng áp dụng cho tổng kích thước của tệp dBase (2Gb), có thể được tiếp cận bằng bản ghi 536k ở độ rộng tối đa, khi các bản ghi 5,36m sẽ có sẵn ở độ rộng 400 byte.

Có một lý do khác để giới hạn độ rộng trường - chất lượng dữ liệu. Nếu một người chỉ định chỉ có thể giữ hợp pháp hai ký tự, nhưng bạn xác định nó bằng mười ký tự, thì bạn sẽ tăng khả năng có một giá trị không hợp lệ bằng ngón tay mập được chấp nhận bởi tệp dữ liệu.

Mặt khác, nếu bạn chỉ cung cấp độ rộng cần thiết và nhận dữ liệu quốc tế ở định dạng UTF-8, bạn có thể thấy mình thiếu không gian khi một ký tự có thể sử dụng 2-6 byte.

Vì vậy, đối với các trường chuỗi cơ sở dữ liệu (bao gồm cơ sở dữ liệu địa lý tệp), thường bị chấm dứt và do đó không lãng phí không gian hàng, tính linh hoạt là một tùy chọn, nhưng đối với các định dạng có chiều rộng cố định, các quy tắc cũ vẫn được áp dụng.


Cảm ơn câu trả lời. Tôi không chắc chắn tôi hoàn toàn hiểu câu trả lời từ Vince vì tôi không biết nhiều về các cấu trúc cơ sở dữ liệu khác nhau, nhưng tôi có ý chính của nó. Tôi nghĩ rằng sự cân nhắc chính của tôi sau đó sẽ là với tính toàn vẹn dữ liệu và không thiết lập bất cứ điều gì lâu hơn nó cần - điều dường như rõ ràng bây giờ - cảm ơn
Martin Hügi

Các công cụ chính để cảm ơn những người trả lời câu hỏi của bạn là upvote và đánh dấu câu hỏi đã trả lời. Nếu bạn không rõ ràng về điều gì đó, hãy hỏi. Ý tưởng ở đây là xây dựng câu trả lời tốt .
Vince

1
@Vince trả lời tốt điều này, chỉ còn một lý do nữa tôi sẽ thêm vào: Làm cho ý định rõ ràng. Khi một trường có tên "trạng thái" chỉ có 2 ký tự thì rõ ràng trường đó có nghĩa là giữ chữ viết tắt chuẩn cho một trạng thái. Tuy nhiên, nếu bạn tạo trường đó 50 hoặc 200 ký tự, nó có thể được hiểu là giữ tên đầy đủ của trạng thái. Điều này liên quan trở lại vào chất lượng dữ liệu tổng thể.
Phòng thí nghiệm RustProof

Theo dõi - Sau 18 tháng, tất cả bây giờ có ý nghĩa hơn nhiều - câu trả lời tuyệt vời
Martin Hügi
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.