Tôi có một kịch bản thiết kế bảng và là một loại không phải DBA, muốn có ý kiến về khả năng mở rộng hơn.
Giả sử bạn được yêu cầu ghi lại thông tin về các ngôi nhà cho một khu vực tàu điện ngầm, bắt đầu với một khu phố nhỏ (200 ngôi nhà) nhưng cuối cùng tăng lên hơn 5000000 nhà.
Bạn được yêu cầu lưu trữ thông tin cơ sở: ID # (Một số duy nhất # chúng tôi có thể sử dụng làm chỉ mục duy nhất), Addr, City, State, Zip. Tốt, bảng đơn giản sẽ xử lý nó.
Nhưng mỗi năm, bạn sẽ được yêu cầu ghi lại thông tin thêm về tất cả các ngôi nhà - và thông tin gì sẽ thay đổi mỗi năm. Vì vậy, ví dụ, năm đầu tiên, bạn được yêu cầu ghi lại họ của chủ sở hữu và cảnh quay vuông. Năm thứ hai, bạn được yêu cầu giữ tên cuối cùng, nhưng bỏ đoạn phim vuông và thay vào đó bắt đầu thu thập tên của chủ sở hữu.
Cuối cùng - mỗi năm số # cột thêm sẽ thay đổi. Có thể bắt đầu với 2 cột thêm, sau đó chuyển sang 6 cột tiếp theo, sau đó giảm xuống 2 cột.
Vì vậy, một cách tiếp cận bảng là cố gắng thêm thông tin tùy chỉnh dưới dạng cột trong bảng nhà để chỉ có một bảng.
Nhưng tôi có một tình huống mà ai đó đã đặt ra các bảng cho điều này như:
Các cột "Bảng nhà": ID, Addr, City, State, Zip - với một hàng cho mỗi ngôi nhà
ID Addr City State Zip
-------------------------------------------
1 10 Maple Street Boston MA 11203
2 144 South Street Chelmsford MA 11304
3 1 Main Avenue Lowell MA 11280
Các cột "Bảng thông tin tùy chỉnh": ID, Tên, Giá trị - với bảng trông giống như:
ID Name Value
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 Square Footage 1200
2 Square Footage 1930
3 Square Footage
Vì vậy, có nhiều hàng cho mỗi bản ghi nhà riêng lẻ. Mỗi năm khi thông tin tùy chọn yêu cầu thay đổi, bảng này được xây dựng lại theo nghĩa đen, vì vậy năm tới nó có thể trông như sau:
1 Last Name Smith
2 Last Name Harrison
3 Last Name Markey
1 First Name John
2 First Name Harry
3 First Name Jim
Cuối cùng, bạn tích lũy được 100.000 hàng nhà VÀ một năm có thêm 10 thông tin; bảng thứ hai bây giờ là 1.000.000 hàng thông tin, nhiều trong số đó có thông tin (mô tả) dư thừa. Các yêu cầu cơ sở dữ liệu nói chung là mọi người sẽ cần lấy thông tin hàng nhà + các giá trị trường tùy chỉnh được liên kết hàng nghìn lần mỗi ngày.
Vì vậy, câu hỏi của tôi: nó sẽ là thực hành xấu (hoặc khủng khiếp) để thay thế:
A) Bố trí bảng nhà với đoán tối đa # cột tùy chỉnh (được gọi là "1" đến "10") và chèn các giá trị tùy chỉnh đó ngay trong các hàng nhà
HOẶC LÀ
B) Lưu trữ thông tin tùy chỉnh trong bảng nhà, nhưng mỗi năm khi các yêu cầu thay đổi, hãy xây dựng lại bảng nhà chỉ với # cột cần thiết cho thông tin tùy chỉnh, với ý tưởng rằng các yêu cầu có thể bị hỏng và bạn không bao giờ biết tối đa bao nhiêu lĩnh vực tùy chọn có thể được yêu cầu?
Cảm ơn, hy vọng điều này có ý nghĩa!